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) не работает, может быть пробелами в строках. Файл не прощает ведущих пробелов. Поэтому убедитесь, что в каждой строке вашего файла нет ни одной, кроме пустой строки. Мне понадобилось время, чтобы понять.

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

Другие вопросы по тегам