Как мне настроить git на локальное игнорирование некоторых файлов? - PullRequest
1139 голосов
/ 18 ноября 2009

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

Ответы [ 8 ]

1568 голосов
/ 18 ноября 2009

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

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

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

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

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

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

403 голосов
/ 22 января 2013

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


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

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

143 голосов
/ 19 августа 2013

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

101 голосов
/ 18 ноября 2009

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

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

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

48 голосов
/ 11 июля 2015

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

git update-index --skip-worktree FILENAME

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

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

44 голосов
/ 22 августа 2016

Вы можете установить некоторые git aliases , чтобы упростить этот процесс. Это редактирует [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 версию того же самого.

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

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

30 голосов
/ 14 октября 2016

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

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

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

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

0 голосов
/ 09 августа 2016

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

...