Git: исключить файл с помощью git clean

Я работаю над большим проектом Python, и я действительно болен, если файлы.pyc и *~. Я хотел бы удалить их. Я видел, что -X Флаг git clean удалит неотслеживаемые файлы. Как вы можете себе представить, я не отслеживаю .pyc ни *~ файлы. И это сделало бы хитрость. Проблема в том, что у меня есть local_settings.py файл, который я хотел бы сохранить после Git в чистоте.

Итак, это то, что у меня есть.

.gitignore:

*.pyc
*~
local_settings.py

Когда я выполняю эту команду:

git clean -X -n -e local_settings.py

Я получаю этот список результатов:

Будет удалить local_settings.py
Удалил бы требования.txt~
Удалил (другую кучу) ~ файлы
Удалил (другую кучу) pyc файлы

Я не хочу удалять файл local_settings.py. Я пробовал много способов сделать это, но я не могу понять, как это сделать.

git clean -X -n -e local_settings.py
git clean -X -n -e "local_settings.py"
git clean -X -n --exclude=local_settings.py
git clean -X -n --exclude="local_settings.py"

И, кажется, ничего не работает.

РЕДАКТИРОВАТЬ:

Для потомков правильный способ сделать это (спасибо @Rifat):

git clean -x -n -e local_settings.py # Shows what would remove (-n flag)
git clean -x -f -e local_settings.py # Removes it (note the -f flag)

5 ответов

Решение

Пожалуйста, попробуйте это с небольшим x вместо столичного. Подобно - git clean -x

git clean -x -n -e local_settings.py # Shows what would remove (-n flag)
git clean -x -f -e local_settings.py # Removes it (note the -f flag)

Из документации git:

   -x
       Don't use the standard ignore rules read from .gitignore (per
       directory) and $GIT_DIR/info/exclude, but do still use the ignore
       rules given with -e options. This allows removing all untracked
       files, including build products. This can be used (possibly in
       conjunction with git reset) to create a pristine working directory
       to test a clean build.

   -X
       Remove only files ignored by git. This may be useful to rebuild
       everything from scratch, but keep manually created files.
git clean -X -n --exclude="!local_settings.py"

работает. Я обнаружил это, когда я погуглил и получил эту страницу.

Я поместил локальные файлы, которые попадают в эту категорию в.git/info/exclude (например, мои файлы проекта IDE). Они вы можете сделать чистку, как это:

git ls-files --others --exclude-from=.git/info/exclude -z | \
    xargs -0 --no-run-if-empty rm --verbose

Куда:

  • --others: показывает неотслеживаемые файлы
  • --exclude-from: предоставить стандартный файл стиля git ignore, который нужно исключить из списка
  • -z / -0: использовать \0 вместо \n для разделения имен
  • --no-run-if-empty: не запускать rm, если список пуст

Вы можете создать псевдоним, например:

git config --global alias.myclean '!git ls-files --others --exclude-from=.git/info/exclude -z | xargs -0 --no-run-if-empty rm --verbose --interactive'

--Interactive означает, что вы должны выполнить git myclean -f для принудительного удаления.

Ссылка: http://git-scm.com/docs/git-ls-files (плюс первая строка по умолчанию.git/info/exclude)

Если вы уже совершили загрузку и так далее, сделайте следующее:

Добавьте *.pyc, *~ и local_settings.py в.gitignore. Затем сделайте в вашем репозитории git:

find . -name '*.pyc' | xargs rm
find . -name '*~' | xargs rm

затем сделайте:

git commit -am "get rif of them"

теперь они больше не должны вас беспокоить

Если вы используете Python 2.6+, просто установите переменную окружения, PYTHONDONTWRITEBYTECODE, чтобы true, Вы можете просто добавить следующее к чему-то вроде .profile или же .bashrc чтобы полностью отключить его для вашего профиля:

export PYTHONDONTWRITEBYTECODE=true

Или, если вы просто хотите сделать это для конкретного проекта, который вы работаете, вам нужно будет каждый раз запускать вышеуказанное в своей оболочке (или в одном из ваших сценариев init virtualenv, если вы используете virtualenv и virtualenvwrapper), или вы можете просто передать -B параметр при звонке pythonнапример,

python -B manage.py runserver
Другие вопросы по тегам