Ответ 1
Возможно, вам нужно сделать:
git config --global core.excludesfile ~/.gitignore_global
И для кофе.
Я создал файл .gitignore_global
и поместил его в каталог установки git. Когда я запускаю команду:
git config --global core.excludesfile ~/.gitignore
правила в файле ignore не применяются к моим фиксациям.
Когда я переименую файл .gitignore
и поместил его в свой корень проекта, применяются правила.
Что здесь не так?
Возможно, вам нужно сделать:
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
Я обнаружил, что когда я определил 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)
Примечание: начиная с git1.7.12 (август 2012 г.):
Значение:
core.attributesfile
умолчаниюcore.attributesfile
значение $ HOME/.config/git/attribute иcore.excludesfile
умолчанию имеет значение$HOME/.config/git/ignore
когда эти файлы существуют.
Поэтому, если вы создаете файл $HOME/.config/git/attributes
, вам даже не нужно устанавливать настройки core.excludesfile
.
Файл должен находиться в вашем домашнем каталоге. В окнах это обычно означает: C:\документы и настройки\[пользователь].
В Linux это: /Главная/[пользователь]
У меня была эта проблема, потому что изначально я назвал "git config core.excludefiles" без -global и с неправильным значением, и, следовательно, он сохранил свойство локально. Похоже, что локальная собственность скрывала глобальную (которая имела правильное значение), полностью игнорируя ее.
У меня была такая же проблема (в Windows). Я закончил проверку моего файла ~/.gitconfig
и обнаружил, что для моего excludesfile
установлено значение:
excludesfile = C:\\Users\\myUserName\\Documents\\gitignore_global.txt
но это должно было быть:
excludesfile = C:\\Users\\myUserName\\.gitignore_global
После того, как я изменил его, все сработало так, как должно быть.
Другая причина, по которой глобальное игнорирование git может не работать: невидимые символы в пути.
Я только узнал, что это была моя проблема при вставке предупреждающего сообщения из git-check-ignore в адресную строку Chrome, где оно, к счастью, стало видимым:
(Это не было видно на терминале. И это могла быть длинная кроличья нора отладки... 😅)
Еще один трудный способ отслеживать причину, по которой .gitignore (_ global) не работает, может быть ведущим пробелом в строках. Файл не прощает для ведущих пробелов. Поэтому убедитесь, что в каждой строке вашего файла нет никаких задержек. Мне потребовалось некоторое время, чтобы понять.
Просто добавлю два цента.
Недавно я допустил ошибку и выполнил следующую команду
git config core.excludesfile tags
это изменило путь excludesfile к локальному файлу в текущем репозитории, и этот конфиг был записан в локальный файл конфигурации под .git/config
, поэтому, чтобы исправить это, я только что открыл файл .git/config
и удалил строку excludesfile tags
и все возвращается к норме.
Также у меня была забавная вещь с кодировкой этого файла. Каким-то образом моя Windows 10 (с Powershell) создала файл с кодировкой "UTF-16 LE", и Git почему-то не смог с этим справиться. Когда я изменяю кодировку на гораздо более разумное значение буквально всего остального, это работает.