Как сохранить все проигнорированные файлы в git clean -fd?
Когда у меня есть .gitignore data/*
и запустите git clean -fd
, папка с данными и все ее файлы содержимого будут удалены.
Я хочу удалить все незарегистрированные файлы в репозитории git, исключая все игнорируемые файлы (т.е. НЕ удалять gitignored файлы). Что я могу сделать?
Ответы
Ответ 1
Git обычно не очищает игнорируемые файлы, если не указан флаг -x
, но странным образом он очищается при настройке, как вы сделали (folder/*
).
Как указал @VonC, вам следует изменить .gitignore
-file, чтобы игнорировать каталог (data/
), а не его содержимое (data/*
).
Это тонкая разница, но это важно для мерзавца.
Ответ 2
Я нашел еще несколько деталей. Имея /tmp/*
в gitignore, git clean -fd
удалит его. Как было сказано в других ответах, этого не происходит с /tmp/
в gitignore.
Но как только вы зарегистрируете любой файл в этом каталоге, git clean -fd
будет игнорировать этот путь. Этого можно достичь с помощью git add -f
или добавления !/tmp/.keep
в gitignore и проверки этого файла в.
Ответ 3
Изменение data/*
на data/
для меня нецелесообразно, потому что после этого вы не можете вносить в белый список файлы/папки в исключенных папках.
когда вы помещаете это в .gitignore
data/
!data/foo.txt
файл foo.txt
не будет включен.
Чтобы удалить все неотслеживаемые файлы (и папки), как они показаны в git status
(и сохранить что-то вроде data/*
в gitignore), вы можете использовать
git ls-files -z -o --exclude-standard | xargs -0 rm -rf
Это выведет список всех неотслеживаемых файлов и передаст их функции rm -rf
, которая удалит их.
Кредиты для fooobar.com/info/4092/...