Как мне настроить Git, чтобы игнорировать некоторые файлы локально?


могу ли я игнорировать файлы локально, не загрязняя глобальную конфигурацию git для всех остальных? У меня есть неотслеженные файлы, которые являются спамом в моем статусе git, но я не хочу фиксировать изменения конфигурации git для каждого маленького случайного неотслеженного файла, который у меня есть в моих локальных ветвях.

9 991

9 ответов:

С соответствующая документация Git:

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

The .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 file

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 файл, если это относится к одному дереву.
  • выполнить 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 перечислит все файлы, которые вы "игнорируете" в порядке, описанном выше.

я построил их, ссылаясь на ответ фатмана - которая представляет собой --assume-unchanged версия то же самое.

версия, которую я представляю, использует --skip-worktree за игнорирование локальных изменений. Видеть Borealid это для полного объяснения разницы, но по существу ы для разработчиков, чтобы изменить файлы без риска совершения их изменений.

The git ignored команда, представленная здесь, использует git ls-files -v, и фильтрует список, чтобы показать только те записи, начиная с S тег. Элемент S тег обозначает файл, состояние которого"пропустить рабочее дерево". Для полного списка статусов файлов, показанных git ls-files: см документация для на git ls-files.

вы можете просто добавить .gitignore файл в ваш домашний каталог, т. е. $HOME/.gitignore или ~/.gitignore. Затем сказать Git, чтобы использовать этот файл с помощью команды:

git config --global core.excludesfile ~/.gitignore

Это нормально .gitignore файл, который git ссылается при принятии решения, что игнорировать. Поскольку он находится в вашем домашнем каталоге, он применяется только к вам и не загрязняет ни один проект .гитюдного файлы.

Я использую этот подход в течение многих лет с отличными результатами.

Не забудьте признать один факт с ответом @joss lee.

    git update-index --assume-unchanged directory/

обратите внимание на косую черту(/) в конце.

Если у вашего РЕПО еще нет a .gitignore файл, то простое решение заключается в создании .gitignore файл, и в него добавить .gitignore в список игнорируемых файлов.