Есть ли причина использовать git clean без -f? - PullRequest
0 голосов
/ 27 августа 2018

Насколько я понимаю, цель git clean - удалить неотслеживаемые файлы. Но он не будет (по умолчанию) работать без флага -f. Я могу понять флаг -f для команд, которые делают что-то , кроме , что-то удаляет, потому что я мог бы запустить их, чтобы сделать что-то одно, даже не подозревая, что это также приведет к удалению файлов в качестве побочного эффекта. Но если я запускаю git clean, я знаю Я буду удалять файлы.

Это просто механизм безопасности, как всплывающее окно "Вы уверены"? Или на самом деле что-то еще git clean может обойтись без флага -f?

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Вот коммит, в который была включена опция -f:

https://github.com/git/git/commit/2122591b3b5c6d93d3052a3151afcfa3146ede84#diff-3099dbcff3411d798a74588a2638748e

Там написано:

Добавьте параметр clean.requireForce и добавьте параметр -f в git-clean для более ...

… катайтесь на нем

Добавить новый параметр конфигурации clean.requireForce. Если установлено, git-clean будет отказать в запуске, если не принудительно введен с новой опцией -f или не действует из-за -n.

Исправлено позже: https://github.com/git/git/commit/89c38500192e00988966246420902dc946e4f4ef#diff-3099dbcff3411d798a74588a2638748e

git-clean: исправить описание поведения по умолчанию

В настоящее время, когда вызывается без -n и -f, git clean выдает

fatal: clean.requireForce не задан и -n или -f не задан; отказываясь чистый

, что заставляет пользователя задуматься, зачем нужна сила, когда requireForce не установлен. Поиск в git-clean (1) не помогает потому что его описание неверно.

Измените это так, чтобы git clean выдала

fatal: по умолчанию clean.requireForce имеет значение true, а -n или -f не задано; отказываясь убирать

в этой ситуации (и "... установлен в true ...", когда он установлен), который делает становится понятнее, что незафиксированный конфиг означает здесь значение true, и настройте документация.

0 голосов
/ 27 августа 2018

Но он не будет (по умолчанию) работать без флага -f.

На самом деле, git clean откажется выполнять что-либо, если вы не укажете -f, -i или -n. Вы должны указать хотя бы один из них.

-n для «пробного запуска» (показывает, что будет сделано без фактического удаления файлов). Два других действуют так же, как команда rm. «force» (молча удаляет все, что соответствует) или «интерактивный» (явно запрашивает у пользователя каждый соответствующий файл).

Это просто механизм безопасности, как всплывающее окно "Вы уверены"?

На мой взгляд, это действительно эффективный способ представить вещь.

make clean на самом деле очень опасно, так как выглядит как обычная команда, но на самом деле удаляет все, что еще не сохранено, что делает его одной из редких команд, которые могут фактически потерять данные при нет надежды на выздоровление. Зная, что большинство новичков уже спешат с «git checkout -f» и «git reset --hard», мы легко понимаем, что такой шаг безопасности не бесполезен.

В частности, "git clean -f" будет удалять каждый новый файл, который еще не был добавлен пока ! Это может быть, например, новый модуль, который вы писали весь день для проекта, над которым вы работаете.

Кроме того, когда git используется для работы над проектом разработки программного обеспечения (то есть наиболее частым случаем использования), можно предположить, что «git clean» работает так же, как «make clean», что будет большая ошибка. Последний создан для того, чтобы убирать собственное дерьмо и точно знает, что искать. Git сделал бы обратное.

Обычный способ работы с SCM - никогда не трогать то, что не было явно отслежено один раз. git clean по сути предназначен либо для восстановления исходного состояния существующего репозитория, чтобы избежать его отбрасывания и повторного клонирования, либо для очистки всего, что бесполезно, после того, как мы выполнили большую задачу, перед началом совместного использования. вещь.

Если бы я был системным администратором и если бы это было возможно, я бы сконфигурировал поведение по умолчанию git clean как -i, вместо того, чтобы просто предлагать пользователю доступные параметры, как rm в большинстве дистрибутивов. Это показывает сообщение, рассказывающее точно, что в настоящее время делается, и дает людям, которые не знают, что они делают, чтобы остановиться, пока не стало слишком поздно. Простой запрос «-f», «-i» или «-n» является риском для пользователя выбрать «-f» по умолчанию.

0 голосов
/ 27 августа 2018

Есть неотслеживаемые файлы и каталоги, и вы запускаете git clean.Он напечатает fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean.

Так что без -f вы можете сделать что-то вроде

git -c clean.requireForce=false clean -d, что аналогично git clean -df;

git clean -dn, который выполняет пробный прогон и просто сообщает, что будет удалено, фактически не удаляя ничего;

git clean -id, что позволяет интерактивно удалять неотслеживаемые файлы и каталоги;

git clean -nX, который сообщает, какие игнорируемые файлы будут удалены.

Я согласен, что это механизм безопасности.Но, как видите, это не всегда необходимо.

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