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
,