Git глобальное игнорирование не работает

Я создал файл .gitignore_global и поместил его в каталог установки git. Когда я запускаю команду:

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

правила в файле ignore не применяются к моим фиксациям.

Когда я переименую файл .gitignore и поместил его в свой корень проекта, применяются правила.

Что здесь не так?

Ответ 1

Возможно, вам нужно сделать:

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

И для кофе.

Ответ 2

Думал, я бы смирился с этим. Есть еще одна причина, по которой глобальный файл игнорирования, похоже, не работает. Это то, что я не думаю, было рассмотрено в предыдущих ответах. Это настолько ослепительно очевидно, что - конечно - очень легко пропустить.

Это то, что 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

Ответ 3

Я обнаружил, что когда я определил global core.excludesfile следующим образом:

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)

Ответ 4

Примечание: начиная с git1.7.12 (август 2012 г.):

Значение:

  • core.attributesfile умолчанию core.attributesfile значение $ HOME/.config/git/attribute и
  • core.excludesfile умолчанию имеет значение $HOME/.config/git/ignore когда эти файлы существуют.

Поэтому, если вы создаете файл $HOME/.config/git/attributes, вам даже не нужно устанавливать настройки core.excludesfile.

Ответ 5

Файл должен находиться в вашем домашнем каталоге. В окнах это обычно означает:   C:\документы и настройки\[пользователь].

В Linux это:   /Главная/[пользователь]

Ответ 6

У меня была эта проблема, потому что изначально я назвал "git config core.excludefiles" без -global и с неправильным значением, и, следовательно, он сохранил свойство локально. Похоже, что локальная собственность скрывала глобальную (которая имела правильное значение), полностью игнорируя ее.

Ответ 7

У меня была такая же проблема (в Windows). Я закончил проверку моего файла ~/.gitconfig и обнаружил, что для моего excludesfile установлено значение:

excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt

но это должно было быть:

excludesfile = C:\\Users\\myUserName\\.gitignore_global

После того, как я изменил его, все сработало так, как должно быть.

Ответ 8

Другая причина, по которой глобальное игнорирование git может не работать: невидимые символы в пути.

Я только узнал, что это была моя проблема при вставке предупреждающего сообщения из git-check-ignore в адресную строку Chrome, где оно, к счастью, стало видимым:

enter image description here

(Это не было видно на терминале. И это могла быть длинная кроличья нора отладки... 😅)

Ответ 9

Еще один трудный способ отслеживать причину, по которой .gitignore (_ global) не работает, может быть ведущим пробелом в строках. Файл не прощает для ведущих пробелов. Поэтому убедитесь, что в каждой строке вашего файла нет никаких задержек. Мне потребовалось некоторое время, чтобы понять.

Просто добавлю два цента.

Ответ 10

Недавно я допустил ошибку и выполнил следующую команду git config core.excludesfile tags это изменило путь excludesfile к локальному файлу в текущем репозитории, и этот конфиг был записан в локальный файл конфигурации под .git/config, поэтому, чтобы исправить это, я только что открыл файл .git/config и удалил строку excludesfile tags и все возвращается к норме.

Ответ 11

Также у меня была забавная вещь с кодировкой этого файла. Каким-то образом моя Windows 10 (с Powershell) создала файл с кодировкой "UTF-16 LE", и Git почему-то не смог с этим справиться. Когда я изменяю кодировку на гораздо более разумное значение буквально всего остального, это работает.