Как настроить 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 unignore config.xml
    • git возобновит признавая изменения config.xml - позволяет вам снова зафиксировать эти изменения.
  • 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 в список файлов, которые следует игнорировать.