Git global ignore не працює


83

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

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

правила у файлі ігнорування не застосовуються до моїх комітів.

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

Що тут не так?


@Jarrod `~ / .gitignore_global` - це те, що мав на увазі OP, і просто друкарська помилка в дописі, хоча він прийняв мою відповідь, тому ваша редагування не є гарною
CharlesB

Відповіді:


167

Можливо, вам потрібно зробити:

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

І випити кави.


Вибачте, це я мав на увазі. Той, кого я скопіював, просто возився, щоб побачити, що працює.
user880954

Справді для кави та зубів. Ви впевнені, що .gitignore_global знаходиться у вашому $ HOME? ви говорите, що встановили його в каталозі git install?
CharlesB

будь-яка ідея, чому це все ще не працює тут? Я отримав файл .7z, який я хочу пропустити; Я додав ці правила: gist.github.com/octocat/9257657 ; і після того, як я змінив файл, він все ще отримує версію на .git :(
Aquarius Power

3
Так, gitignoreфайл працює лише для невідстежених файлів, а не для тих, які були додані раніше
CharlesB,

1
Інша річ, яку я щойно помітив, - це шаблон рядка у файлі .gitignore_global, який повинен точно відповідати шляху з головного каталогу проекту. Наприклад, якщо ім'я проекту - myProject, який генерує код SQL у myProject / sql / init, і ви хочете ігнорувати myProject / sql / init / *. Sql, запис повинен бути * / sql / init /. Подібним чином, для згенерованого коду DAO / DTO в myProject / msg / dao / та myProject / dao, для вловлення ВСІХ файлів у підкаталогах dao мають бути два записи - * / * / dao / та * / dao /.
Кіт Кіблер,

80

Думав, що я на цьому розберуся. Є ще одна причина, через яку файл глобального ігнорування не працює. Це те, що, на мою думку, не було висвітлено в попередніх відповідях. Це настільки сліпуче очевидно, що - звичайно - це дуже легко пропустити.

Це те, що git буде ігнорувати лише нові файли . Якщо файл вже відслідковується git, то, звичайно, git не буде його ігнорувати! Отже, які б шаблони в будь-якому файлі gitignoreта excludeфайлі не застосовувались .

Що має сенс. Чому git хоче ігнорувати зміни файлів, які він вже відстежує? Якщо файл потрібно ігнорувати, спочатку потрібно сказати git не відстежувати його, а потім git ігнорувати, як описано в посібнику. Інформацію про те, як відстежувати файли, див. У цій відповіді .

Це все змушує мене запитати, чи можна ігнорувати зміни у відстежуваних файлах? Знову ж таки, git забезпечує. Ця відповідь; Git: Ігнорувати відстежувані файли дає нам команду (замініть fileфайлом, який ви хочете проігнорувати):

git update-index --assume-unchanged file

Нарешті, ось додаткова інформація про налагодження git ignore.

Сторінка керівництва Gitignore (5) повідомляє нам:

Шаблони, які користувач хоче, щоб Git ігнорував у будь-яких ситуаціях (наприклад, резервні копії або тимчасові файли, створені вибраним редактором користувача), як правило, потрапляють у файл, зазначений core.excludesfile в користувацькому ~ / .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


7
git update-index --assume-unchanged fileсаме те, що я шукав, дякую!
Джай

14

Я виявив, що коли я визначив 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)

Я теж це спостерігав. Я переглянув документацію, але нічого не знайшов: окрім .gitignore (для кожного каталогу) та .git / info / exclude, git шукає у цьому файлі шаблони файлів, які не призначені для відстеження. "~ /" розширюється до значення $ HOME і "~ user /" до домашнього каталогу зазначеного користувача.
rliu

9

Примітка: починаючи з git1.7.12 (серпень 2012 р.) :

Значення:

  • core.attributesfile за замовчуванням $ HOME / .config / git / attributes та
  • core.excludesfileза замовчуванням $HOME/.config/git/ignoreвідповідно, коли ці файли існують.

Отже, якщо ви створюєте $HOME/.config/git/attributesфайл, вам навіть не потрібно встановлювати core.excludesfileналаштування.


4

Файл повинен бути у вашому домашньому каталозі. У вікнах це зазвичай означає: C: \ documents and settings \ [user].

У Linux це: / home / [користувач]


2

У мене була ця проблема, тому що я спочатку називав 'git config core.excludefiles' без --global і з неправильним значенням, і, отже, він зберігав властивість локально. Схоже, локальне властивість приховувало глобальне (яке мало правильне значення), повністю ігноруючи його.


2

Ще одна причина, через яку глобальний ігнорування git може не працювати: невидимі символи у шляху.

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

введіть тут опис зображення

(Це не було видно на терміналі. І це могла бути довга кроляча діра налагодження ... 😅)


1

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

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

але це мало бути:

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

Після того, як я його змінив, все запрацювало як слід.


1

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


0

Ще однією важкою причиною, через яку .gitignore (_global), здається, не працює, можуть бути пробіли в рядках. Файл не прощає провідних пробілів. Тож переконайтесь, що в кожному рядку вашого файлу немає жодного, якщо це не порожній рядок. Мені знадобився час, щоб це зрозуміти.

Просто додаю мої два центи.


0

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.