Git Global игнорировать не работает
Я создал файл .gitignore_global
и поместите его в мой каталог git install. Когда я запускаю команду:
git config --global core.excludesfile ~/.gitignore
правила в файле игнорирования не применяются к моим коммитам.
Когда я переименую файл .gitignore
и поместите его в корень моего проекта, правила действительно применяются.
Что здесь не так?
16 ответов
Может быть, вам нужно сделать:
git config --global core.excludesfile ~/.gitignore_global
И выпить кофе.
Думал, я бы смирился с этим. Есть еще одна причина, по которой глобальный файл игнорирования, похоже, не работает. Я не думаю, что это было описано в предыдущих ответах. Это настолько ослепительно очевидно, что - конечно - очень легко пропустить.
Это то, что git будет игнорировать только новые файлы. Если файл уже отслеживается Git, то, конечно, Git не будет игнорировать его! Так что любые модели в любом gitignore
или же exclude
файл не применяется.
В этом есть смысл. Почему git хочет игнорировать изменения в файлах, которые он уже отслеживает? Если файл нужно игнорировать, вы должны сначала сказать git не отслеживать его, а затем git игнорировать его, как описано в руководстве. Информацию о том, как удалить файлы, смотрите в этом ответе.
Все это заставляет меня спросить, можно ли игнорировать изменения в отслеживаемых файлах? Опять мерзавец доставляет. Этот ответ; Git: игнорировать отслеживаемые файлы дает нам команду (заменить file
с файлом, который вы хотите игнорировать):
git update-index --assume-unchanged file
Наконец, вот некоторая дополнительная информация об отладке git ignore.
Страница руководства gitignore(5) сообщает нам:
Шаблоны, которые пользователь хочет, чтобы Git игнорировал во всех ситуациях (например, резервные копии или временные файлы, сгенерированные выбранным редактором пользователя), обычно помещаются в файл, указанный в core.excludefile в ~/.gitconfig пользователя. Его значение по умолчанию - $XDG_CONFIG_HOME/git/ignore. Если $ XDG_CONFIG_HOME либо не установлен, либо пуст, вместо него используется $HOME/.config/git/ignore.
Итак, это новое и заменяет предыдущее ~/.gitignore_global
упоминалось ранее.
Далее, и это действительно полезно, это то, что с 1.8.2 у нас теперь есть несколько отличных инструментов отладки. Посмотри на:
Git учится игнорировать лучше - Новое в 1.8.2
Это показывает, как использовать новый check-ignore
флаг, чтобы убедиться, что git успешно игнорирует ваши шаблоны, например
git check-ignore bin/a.dll --verbose
Я обнаружил, что когда я определил это так:
git config --global core.excludesfile $HOME/.config/git/ignore
это не сработало. Измените его, чтобы не использовать переменную $HOME, например так:
git config --global core.excludesfile ~/.config/git/ignore
это сразу начало работать. Надеюсь, это поможет кому-то еще.
FYI:
$ git --version
git version 1.7.10.2 (Apple Git-33)
Примечание: начиная с git1.7.12 (август 2012 г.):
Значение:
core.attributesfile
по умолчанию используется $HOME/.config/git/attribute иcore.excludesfile
по умолчанию$HOME/.config/git/ignore
соответственно, когда эти файлы существуют.
Так что если вы создаете $HOME/.config/git/attributes
файл, вам даже не нужно устанавливать свой core.excludesfile
установка.
У меня была эта проблема, потому что я первоначально назвал "git config core.excludefiles" без --global и с неправильным значением, и, следовательно, он хранил свойство локально. Похоже, локальное свойство скрыло глобальное (которое имело правильное значение), полностью игнорируя его.
Файл должен находиться в вашем домашнем каталоге. В Windows это обычно означает: C:\documents and settings\[user].
На Linux это: /home/[пользователь]
Также у меня была забавная вещь с кодировкой этого файла. Каким-то образом моя Windows 10 (с Powershell) создала файл с кодировкой "UTF-16 LE", и Git почему-то не смог с этим справиться. Когда я изменяю кодировку на гораздо более разумное значение буквально всего остального, это работает.
Добавление еще одной вещи, которую люди могли пропустить, или, по крайней мере, где я ошибся.
Я сделал ошибку, не скопировав команду, и написал
excludefile
вместо
excludesfile
и потерял определенно полчаса или около того, прежде чем я переоценил написание, думая, что это было что-то другое.
Вы не получаете предупреждение или ошибку при установке параметра, который не является допустимым. Вы получаете предупреждение/сообщение об ошибке, если синтаксис неверен, поэтому я ошибочно предположил, что орфографическая ошибка будет обнаружена таким же образом.
Другая причина, по которой глобальное игнорирование git может не работать: невидимые символы в пути.
Я только узнал, что это была моя проблема при вставке предупреждающего сообщения из git-check-ignore в адресную строку Chrome, где оно, к счастью, стало видимым:
(Это не было видно на терминале. И это могла быть длинная кроличья нора отладки...)
У меня была такая же проблема (на Windows). Я проверил ~/.gitconfig
файл и обнаружил, что мой excludesfile
был установлен на:
excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt
но это должно было быть:
excludesfile = C:\\Users\\myUserName\\.gitignore_global
После того как я его поменял, все заработало как надо.
У меня была эта проблема при использовании Cygwin с Windows Git. Я забыл включить Git из Cygwin. Когда я добавил Git в свою программную базу Cygwin, проблема исчезла.
Я недавно сделал ошибку и запустил следующую командуgit config core.excludesfile tags
это изменило путь файла исключений к локальному файлу в текущем репозитории, и эта конфигурация была записана в локальный файл конфигурации в .git/config
чтобы исправить это я просто открыл .git/config
файл и удалил строку excludesfile tags
и все возвращается на круги своя.
после добавления каталога/имени файла в .gitignore вам следует удалить эти файлы и/или каталоги и создать их заново.
Это сработало для меня. Надежда работает и на вас.
У меня возникла эта проблема при использовании GitKraken на рабочем столе Ubuntu. Утвержденный ответ выше (git config --global core.excludesFile ~/.gitignore_global
) у меня не сработало, потому чтоgit
в моем$PATH
указывает на .
GitKraken имеет настройку, определяющую, какой двоичный файл git использовать, и по умолчанию выбирает тот, с которым он поставляется (не/usr/bin/git
. Найти его двоичный файл немного сложнее.
find /snap/gitkraken/ -name 'git' -type f
дает
/snap/gitkraken/226/usr/share/gitkraken/resources/app.asar.unpacked/git/bin/git
/snap/gitkraken/226/usr/share/gitkraken/resources/app.asar.unpacked/git/libexec/git-core/git
А потом делаю
/snap/gitkraken/226/usr/share/gitkraken/resources/app.asar.unpacked/git/bin/git config --global core.excludesFile $HOME/.gitignore-global
Исправлена моя проблема
Проблема, с которой я столкнулся, заключается в том, что я пытался поместить комментарии INLINE в свой глобальный игнор git.
Например, это НЕ работает:
.DS_Store # from macOS Finder
Это работает:
# from macOS Finder
.DS_Store
Еще одна трудная для отслеживания причина, почему.gitignore(_global) не работает, может быть пробелами в строках. Файл не прощает ведущих пробелов. Поэтому убедитесь, что в каждой строке вашего файла нет ни одной, кроме пустой строки. Мне понадобилось время, чтобы понять.
Просто добавляю мои два цента.