Ответ 1
По умолчанию git clean
не удаляет папки. Он говорит вам, что видит неподписанную папку, но не удаляет ее. Дайте ему флаг -d
, чтобы он также проинструктировал об удалении каталогов, как в git clean -d -n
Когда я запускаю git clean --dry-run
, результаты немного напоминают:
Would remove an_untracked_file
Would remove an_untracked_file_2
Would not remove some_unrelated_folder/subfolder/
"Несвязанные" папки отслеживаются и не имеют никаких изменений, поэтому я не ожидал, что git удалит их.
Но почему git сообщает Would not remove
для некоторых, но не для всех моих обычных (и полностью нетронутых) файлов проекта?
Могу ли я сказать, что вызывает git, но потом решить, удалить их?
git status
перечисляет только пару не отслеживаемых файлов, о которых я знаю. Как и ожидалось.
git ls-files --other --exclude-standard
возвращает те же самые несанкционированные файлы. Как и ожидалось.
git ls-files --other --exclude-standard --directory
возвращает те же самые несанкционированные файлы, плюс куча, казалось бы, обычных каталогов. Это не то, что я ожидал увидеть, поскольку я думал, что целью --directory
было сокращение, а не увеличение количества возвращенных результатов.
При проверке неожиданных каталогов, кажется, каждый из них пуст, кроме подпапки ".gitignore" d.svn. Возможно, это влияет на вещи.
Может ли кто-нибудь помочь мне понять это поведение?
Спасибо
По умолчанию git clean
не удаляет папки. Он говорит вам, что видит неподписанную папку, но не удаляет ее. Дайте ему флаг -d
, чтобы он также проинструктировал об удалении каталогов, как в git clean -d -n
Могу ли я сказать, что вызывает git, но потом решить, удалить их?
Вы действительно можете! (С июля 2013 года, предстоящий git 1.8.4):
Команда "git clean
" выучила интерактивный режим.
См. выполнить 17696002086e8c6b9e998543d212e707c7d511ab для начальной реализации:
См. совершить d1239264f2786d7ea15543b980c6bf6afbc4701a для реализации:
Добавить новое действие для интерактивного
git-clean
: фильтра по шаблону.
Когда пользователь выбирает это действие, пользователь может вводить шаблоны, разделенные пробелами (тот же синтаксис, что иgitignore
), и каждый чистый кандидат, соответствующий одному из шаблонов, будет исключен из очистки.
Когда пользователь почувствует это в порядке, нажмите ENTER и откройте диалоговое окно подтверждения.
См. фиксация db627fd568410499c47d764937c3d7a10bbadffa для тестов и примеров.
Смотрите зафиксировать c0be6b4c8a1d16a92efad00d73683075cf2da60d для документации
Показать, что будет сделано и очистить файлы в интерактивном режиме.
Когда команда переходит в интерактивный режим, она показывает файлы и каталоги, которые нужно очистить, и переходит в интерактивный командный цикл.
Цикл команд показывает список доступных подкоманд и дает подсказку "
What now>
".
В общем случае, когда приглашение заканчивается одним ">
", вы можете выбрать только один из выбранных вариантов и набрать return, например:
------------
*** Commands ***
1: clean 2: filter by pattern 3: select by numbers
4: ask each 5: quit 6: help
What now> 1
------------
Вы также можете сказать
c
илиclean
выше, пока выбор уникален.Основной командный цикл имеет 6 подкоманд.
clean::
Запустите очистку файлов и каталогов, а затем закройте.
filter by pattern::
Показывает файлы и каталоги, которые нужно удалить, и выдает приглашение "
Input ignore patterns>>
".
Вы можете вводить пространственно разделенные шаблоны, чтобы исключить из удаления файлы и каталоги.
Например. "*.c *.h
" будет исключать файлы с ".c
" и ".h
" из удаления.
Когда вы удовлетворены отфильтрованным результатом, нажмите ENTER (пустой) обратно в главное меню.
select by numbers
Показывает файлы и каталоги, которые нужно удалить, и выдает запрос "
Select items to delete>>
".
Когда приглашение заканчивается двойным ">>
" следующим образом, вы можете сделать несколько вариантов, объединенных с пробелом или запятой.
Также вы можете сказать диапазоны.
Например. "2-5 7,9
" выбрать 2,3,4,5,7,9 из списка.
Если второе число в диапазоне опущено, все остальные патчи взяты.
Например. "7-
", чтобы выбрать 7,8,9 из списка.
Вы можете сказать "*
", чтобы выбрать все.
Также, когда вы удовлетворены отфильтрованным результатом, нажмите ENTER (пустой) обратно в главное меню.
ask each::
Это начнет чистку, и вы должны подтвердить один за другим, чтобы удалить элементы.
Обратите внимание, что это действие не так эффективно, как эти два действия.
quit::
Это позволяет вам выйти без очистки.
help::
Покажите краткое использование интерактивного git -clean.
Если некоторые файлы и папки продолжают сбой при выполнении команды, запустите
git clean -d -f
-f
заставит операцию.
Используйте -n
для сухого хода.
Этот ответ в основном предназначен для справочных целей, поскольку я считаю это наиболее распространенным сценарием для очистки вашего репо.
Чтобы удалить все нерекционированные каталоги рекурсивно:
git clean -d -f -x
-d
для каталогов,
-x
для удаления каталогов в вашем списке игнорирования тоже (например, bin
и build
), и это то, что мне нужно большую часть времени и
-f
, чтобы подтвердить, что вы знаете, что делаете.
Я использую git версию 2.10.0 на mac, и почему-то я не могу использовать
git clean -df
чтобы удалить необработанные файлы, поэтому я использовал это вместо:
git checkout -
PS:
если кто-нибудь может объяснить в комментариях, почему я не могу использовать
git clean -df
чтобы удалить файлы, я был бы очень благодарен.. спасибо
ПРЕДУПРЕЖДЕНИЕ вы также потеряете свои отслеживаемые файлы: (