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