Git: очистить пустые каталоги после оформления заказа

Я нахожусь на моей ветви "devel" и git status говорит "рабочий каталог чист".

Я хочу посмотреть на прошлую версию и, таким образом, проверить тег: git checkout tags/v1.0.0, После этого некоторые каталоги, которые были созданы между "v1.0.0" и моим текущим "devel" HEAD, остаются пустыми, но не удаляются (хотя их не было на момент создания тега). Я считаю, что это потому, что git не отслеживает пустые каталоги.

Чтобы иметь точно такое же состояние, как при создании тега, мне нужно дополнительно вызвать git clean -fd который удаляет эти оставшиеся пустые каталоги.

Когда я извлекаю тег, я хочу узнать точное состояние файловой системы, когда этот тег был создан - должен ли я всегда вызывать git clean -fd после оформления заказа?

2 ответа

Решение

Да, вам нужно будет очистить каталоги вручную, так как каталоги никогда не отслеживаются в git, только файлы.

Чтобы сделать это за один шаг, вы можете определить функцию оболочки как псевдоним git, чтобы сделать это за вас за один шаг.

Либо сделайте следующее в вашем терминале:

git config alias.cco "! f(){ git checkout \"\$1\" && git clean -fd; }; f"

или отредактируйте свой .git/config файл и добавьте туда эту запись:

[alias]
    cco = "! f(){ git checkout \"$1\" && git clean -fd; }; f"

Теперь вы можете запустить обе эти команды за один раз, используя:

git cco tag_name

Ваши наблюдения потенциально могут быть объяснены изменением вашего .gitignore:

Предположим, что вы в данный момент находитесь в своей ветке "devel", но у вас есть неотслеживаемый каталог "foo". Если "Foo" указан в вашем .gitignore, git status (правильно) сообщит о чистом рабочем каталоге.

Если вы сейчас оформите свою помеченную версию, она может содержать другую .gitignore (не игнорируя каталог "foo"), и ваш рабочий каталог теперь будет выглядеть грязным.

Когда я извлекаю тег, я хочу точное состояние файловой системы, когда этот тег был создан

Учитывая, что вы можете изменить свой .gitignore (в вашем репо или даже в глобальном масштабе) и тот факт, что git никогда не будет молча удалять любые неотслеживаемые файлы, это не всегда будет возможно без дополнительного вызова git clean -fd,

Другие вопросы по тегам