'' 'git clean' '' не удаляет подкаталоги (не рекурсивно)
У меня проблемы с git clean
. Рассмотрим следующий сценарий:
git status -su
?? file_1
?? xyz/file_2
git clean -f
Not removing xyz/file_2
Removing file_1
Я не хочу удалять папку xyz
, но я хочу удалить file_2
внутри нее.
Почему git clean
не работает рекурсивно?
Ответы
Ответ 1
Если вы игнорируете его, используйте git clean -xf
. Вы можете сделать git clean -xdf
, но это также приведет к удалению неотслеживаемых каталогов. Используйте -n
для пробного прогона.
http://gitready.com/beginner/2009/01/16/cleaning-up-untracked-files.html
Ответ 2
Кроме того, git clean не работает над деревом каталогов. У вас есть
> git status
Untracked files:
../file1.orig
../../file2.orig
git clean -df ничего не сделал бы в этом состоянии. Вы должны "cd" в корне проекта и снова запустить "git clean -df".
Ответ 3
попробуйте следующее:
git clean -xdf
сообщите мне, если это сработало.
Ответ 4
Возможно, у вас есть каталог xyz
в вашем файле .gitignore
где-нибудь? Вы можете переопределить это поведение, используя переключатель -x
на clean
. Кроме того, если каталог xyz
не отслеживается (ничего не отслеживается в нем), он не будет удален, если вы не передадите параметр -d
.
Ответ 5
Обратите внимание, что в вдовах даже git clean -xdf
может потерпеть неудачу, молча пропуская путь, когда он не может lstat()
его; сейчас (Git 2.23, Q3 2019), он выдает предупреждение.
См. коммит b09364c (18 июля 2019 г.) от Йоханнеса Шинделина (dscho
).
Помогли: Рене Шарф (rscharfe
), СЗЕДЕР Габор (szeder
) и Хунио С. Хамано (gitster
).
(Merged by Junio C Hamano -- [TG46] -- in commit f3d508f, 25 Jul 2019)
clean
: показать сообщение об ошибке, если путь слишком длинный
При сбое lstat()
git clean
прерывается без сообщения об ошибке, оставляя пользователя довольно озадаченным.
В частности, в Windows, где максимальная длина пути по умолчанию довольно мала (хотя во многих случаях есть способы обойти это ограничение), очень важно, чтобы пользователям было дано указание, почему их команда не выполнена из-за слишком длинных путей, когда она это сделала..
Этот тестовый пример гарантирует, что выдается предупреждение, которое помогло бы пользователю, сообщившему о проблеме git-for-windows/git
521
Обратите внимание, что мы временно установили core.longpaths = false
в регрессионном тесте; это обеспечивает прямую совместимость с функцией core.longpaths
, которая еще не была расширена из Git для Windows.