Как мне настроить git на локальное игнорирование некоторых файлов?

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

Ответ 1

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

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

Файл .git/info/exclude имеет тот же формат, что и любой файл .gitignore. Другой вариант - установить core.excludesFile имя файла, содержащего глобальные шаблоны.

Обратите внимание, что если у вас уже есть неустановленные изменения, вы должны выполнить следующее после редактирования ваших шаблонов игнорирования:

git update-index --assume-unchanged [<file>...]

Примечание в $GIT_DIR: это обозначение по всему > руководству Git просто для указания пути к Git репозиторий. Если задана переменная окружения, она переопределит местоположение любого репо, в котором вы находитесь, что, вероятно, не является тем, что вы хотите.

Ответ 2

Обновление: используйте вместо этого git update-index --skip-worktree [<file>...], спасибо @danShumway! См. Подробное объяснение различий двух параметров.


Старый ответ:

Если вам нужно игнорировать локальные изменения для отслеживаемых файлов (у нас есть это с локальными изменениями в файлах конфигурации), используйте git update-index --assume-unchanged [<file>...].

Ответ 3

Добавьте следующие строки в раздел [alias] вашего файла .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.

Ответ 4

У вас есть несколько вариантов:

  • Оставьте грязный (или незафиксированный) .gitignore файл в вашем рабочем каталоге (или примените его автоматически, используя topgit или другое патч-инструмент).
  • Поместите исключение в файл $GIT_DIR/info/exclude, если это относится к одному дереву.
  • Запустите git config --global core.excludesfile ~/.gitignore и добавьте шаблоны в ваш ~/.gitignore. Этот параметр применяется, если вы хотите игнорировать определенные шаблоны во всех деревьях. Я использую это для файлов .pyc и .pyo, например.

Кроме того, убедитесь, что вы используете шаблоны, а не явно перечисляете файлы, если это применимо.

Ответ 5

Я думаю, что вы ищете:

git update-index --skip-worktree FILENAME

которые игнорируют изменения, сделанные локально

Вот http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ более подробное описание этих решений!

отменить использование:

git update-index --no-skip-worktree FILENAME

Ответ 6

Вы можете установить некоторые псевдонимы git, чтобы упростить этот процесс. Это редактирует узел [alias] вашего файла .gitconfig.

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 версию --assume-unchanged.

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

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

Ответ 7

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

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

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

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

Ответ 8

Если ваш репо еще не имеет файла .gitignore, тогда простое решение - создать файл .gitignore, а в нем добавить .gitignore в список файлов, которые нужно игнорировать.