Как мне настроить 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
в список файлов, которые нужно игнорировать.