Подтвердить что ты не робот

Как сохранить все проигнорированные файлы в git clean -fd?

Когда у меня есть .gitignore data/* и запустите git clean -fd, папка с данными и все ее файлы содержимого будут удалены.

Я хочу удалить все незарегистрированные файлы в репозитории git, исключая все игнорируемые файлы (т.е. НЕ удалять gitignored файлы). Что я могу сделать?

4b9b3361

Ответ 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/...