git clean: что значит "не удалится"? - PullRequest
20 голосов
/ 26 декабря 2011

Когда я запускаю 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.Возможно, это влияет на вещи.

Может кто-нибудь помочь мне понять это поведение?

Спасибо

Ответы [ 5 ]

28 голосов
/ 26 декабря 2011

По умолчанию git clean не удаляет папки.Он говорит вам, что видит неотслеживаемую папку, но не удаляет ее.Присвойте ему флаг -d, чтобы он также указывал удалять каталоги, как в git clean -d -n

8 голосов
/ 23 июля 2013

Могу ли я сказать, что заставляет git задуматься, но затем отказаться от их удаления?

Вы действительно можете! (С июля 2013 года, грядущий git 1.8.4):
Команда "git clean" выучила интерактивный режим.

См. commit 17696002086e8c6b9e998543d212e707c7d511ab для начальной реализации:

См. commit d1239264f2786d7ea15543b980c6bf6afbc4701a для реализации:

Добавить новое действие для интерактивного git-clean: фильтр по шаблону .
Когда пользователь выбирает это действие, он может вводить разделенные пробелами шаблоны (тот же синтаксис, что и gitignore), и каждый чистый кандидат, который соответствует одному из шаблонов, будет исключен из очистки.
Когда пользователь чувствует, что все в порядке, нажимает ENTER и возвращается в диалоговое окно подтверждения.

См. commit db627fd568410499c47d764937c3d7a10bbadffa для тестов и примеров.

См. commit 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.

6 голосов
/ 21 ноября 2012

Если при выполнении команды некоторые файлы и папки продолжают отказывать, выполните команду

git clean -d -f

-f будет форсировать операцию.

Используйте -n для пробного прогона .

2 голосов
/ 04 июня 2013

Этот ответ в основном для справочных целей, так как я думаю, что это наиболее распространенный сценарий очистки каталога репо.

Чтобы рекурсивно удалить все неотслеживаемые каталоги:

git clean -d -f -x

-d для каталогов, -x для удаления каталогов в вашем списке игнорирования тоже (такие вещи, как bin и build), что мне больше всего нужно и -f чтобы подтвердить, что вы знаете, что делаете.

0 голосов
/ 10 сентября 2016

Я использую Git версии 2.10.0 на Mac, и почему-то я не могу использовать

git clean -df

чтобы удалить неотслеживаемые файлы, поэтому я использовал это вместо:

git checkout -

PS:

если кто-то может объяснить в комментариях, почему я не могу использовать

git clean -df

чтобы удалить файлы, я был бы очень признателен .. спасибо

ВНИМАНИЕ! вы также потеряете свои отслеженные файлы: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...