Как настроить git для локального игнорирования некоторых файлов?
могу ли я игнорировать файлы локально, не загрязняя глобальную конфигурацию git для всех остальных? У меня есть распакованные файлы, которые являются спамом в моем статусе git, но я не хочу фиксировать изменения конфигурации git для каждого маленького случайного распакованного файла, который у меня есть в моих локальных ветвях.
9 ответов
С соответствующая документация Git:
шаблоны, которые специфичны для конкретного репозитория, но которые не должны совместно использоваться с другими связанными репозиториями (например, вспомогательные файлы, которые живут внутри репозитория, но специфичны для рабочего процесса одного пользователя), должны входить в .
на .git/info/exclude
файл имеет тот же формат, что и любой . Другой вариант-установить core.excludesFile
имя файла, содержащего глобальная модель.
Примечание, Если у вас уже есть неустановленные изменения, вы должны выполнить следующее после редактирования ваших шаблонов игнорирования:
git update-index --assume-unchanged [<file>...]
Примечание $GIT_DIR
: это обозначение используется во всем руководство git просто для указания пути к репозиторию git. Если переменная окружения установлена, то она переопределит местоположение любого РЕПО, в котором вы находитесь, что, вероятно, не то, что вы хотите.
обновление: рассмотрите возможность использования git update-index --skip-worktree [<file>...]
вместо этого, спасибо @danShumway! См.объяснение Бореалида о разнице двух вариантов.
ответ:
Если вам нужно игнорировать локальные изменения в отслеживаемых файлах (у нас есть это с локальными изменениями в файлах конфигурации), используйте git update-index --assume-unchanged [<file>...]
.
добавьте следующие строки в раздел [псевдоним] вашего .файл gitconfig хранит настройки
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"
теперь вы можете использовать git ignore my_file
игнорировать изменения в локальном файле и git unignore my_file
перестать игнорировать изменения. git ignored
список игнорируемых файлов.
этот ответ был почерпнут из http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html.
у вас есть несколько вариантов:
- оставьте грязный (или незафиксированный)
.gitignore
файл в рабочем каталоге (или применить его автоматически с помощью topgit или какой-то другой такой патч-инструмент). - поместите исключения в свой
$GIT_DIR/info/exclude
file, если это относится к одному дереву. - Run
git config --global core.excludesfile ~/.gitignore
и добавьте шаблоны в свой~/.gitignore
. Этот параметр применяется, если вы хотите игнорировать определенные закономерности между все деревьев. Я использую это для.pyc
и.pyo
файлы, например.
кроме того, убедитесь, что вы используете шаблоны и явно не перечисление файлов, когда это применимо.
Я думаю, что вы ищете:
git update-index --skip-worktree FILENAME
, которые игнорируют изменения, внесенные местными
вот http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ больше объяснения об этом решении!
вы можете установить некоторые git псевдонимы чтобы сделать этот процесс проще. Это редактирует [alias]
узла .
git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'
ярлыки это устанавливает для вас следующим образом:
-
git ignore config.xml
- git будет делать вид, что он не видит никаких изменений на
config.xml
- предотвращение случайного внесения этих изменений.
- git будет делать вид, что он не видит никаких изменений на
-
git unignore config.xml
- git возобновит признавая изменения
config.xml
- позволяет вам снова зафиксировать эти изменения.
- git возобновит признавая изменения
-
git ignored
- git перечислит все файлы, которые вы" игнорируете", описанным выше способом.
я построил их, ссылаясь на phatmann это - которая представляет собой --assume-unchanged
версия то же самое.
версия, которую я представляю, использует --skip-worktree
для игнорирования локальных изменений. Видеть Borealid это для полного объяснения разницы, но по существу ы для разработчиков, чтобы изменить файлы без риска совершения их изменений.
на git ignored
команда, представленная здесь, использует git ls-files -v
, и фильтрует список, чтобы показать только те записи, начиная с S
тег. The S
тег обозначает файл со статусом "пропустить worktree". Для полного списка статусов файлов, показанных git ls-files
: см документация -t
опция on git ls-files
.
вы можете просто добавить .gitignore файл в вашем домашнем каталоге, т. е. $HOME/.gitignore
или ~/.gitignore
. Затем скажите git использовать этот файл с командой:
git config --global core.excludesfile ~/.gitignore
Это нормально .файл gitignore, на который ссылается git при решении, что игнорировать. Поскольку он находится в вашем домашнем каталоге, он применяется только к вам и не загрязняет ни один проект .гитюдного файлы.
Я использую этот подход в течение многих лет с отличными результатами.
Не забудьте подтвердить один факт с ответом @joss lee.
git update-index --assume-unchanged directory/
обратите внимание на косую черту(/) в конце.
Если у вашего РЕПО еще нет .gitignore файл, то простым решением является создание .gitignore файл, и в него добавить .gitignore
в список файлов, которые следует игнорировать.