Git ігнорує файли, які не знаходяться в gitignore


117

У мене є сховище git, яке ігнорує файли зображень, а також кілька інших файлів, але мій .gitignoreфайл лише ігнорує config.phpфайл. Чи є десь якийсь глобальний файл ігнорування, який я, здається, не можу знайти? Я маю вказати файли, щоб додати їх зараз, і це попереджає мене:

Наступні шляхи ігноруються одним із ваших файлів .gitignore.

Вміст мого ~/.gitconfigфайлу - це лише моя електронна адреса.


Відповіді:


198

git check-ignore

Використовуйте git check-ignoreкоманду для налагодження файлу gitignore (виключення файлів).

Наприклад:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

Вищенаведені вихідні відомості про узгоджений шаблон (якщо такий є) для кожного заданого імені шляху (включаючи рядок).

Тож можливо ваше розширення файлу не ігнорується, але весь каталог.

Повертається формат:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

Або скористайтеся наступною командою для друку вашої .gitignoreв папці HOME користувача та папки сховища:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

В якості альтернативи, git add -fяке дозволяє додавати інакше ігноровані файли.

Див: man gitignore, man git-check-ignoreдля отримання більш докладної інформації.

Синтаксис

git check-ignore [параметри] ім'я шляху…

git check-ignore [options] --stdin


5
Це набагато краще, ніж прийнята відповідь. Жодного образи на це не було, але це врятувало мені день. Дякую, kenorb.
luanjunyi

1
Заслуговує більшої кількості нагород. З'ясували, що деякі дивні gitignore у деяких / vendor / folders викликали проблеми з останньою версією git.
Мануель Арвед Шмідт

2
цей мене сьогодні врятував ... схоже, що візуальна студія створила файл під назвою gitignore_global.txt у папці документів користувачів, і це було ігноруванням файлів, яких я не зміг (не) ігнорувати
Самуель

1
Прекрасно вирішив мою проблему. Деякі зразки не просто зрозуміти на очі !!
Вілла

54

Можливо, буде добре знати, що ваша конфігурація git може містити core.excludesfile, який являє собою шлях до файлу з додатковими шаблонами, які ігноруються. Ви можете дізнатися, чи є у вас така конфігурація, запустивши (в проблемному git repo):

git config core.excludesfile

Якщо він друкує шлях до файлу, подивіться його вміст для отримання додаткової інформації.

У моєму випадку я встановив git через стару версію boxen, яка ігнорувала шаблон "Icon?" що в моєму випадку дав мені попередження, згадане в цьому питанні, для значків папок (я перебуваю на файловій системі, нечутливій до регістру, тому Icon? відповідає іконам).


2
Це справді була моєю проблемою. Не знаю, як або коли цей файл редагується, але у ньому був файл, який я хотів, перерахований у ньому
toxaq

2
Дякую, ти врятував мені години чистої агонії. У моєму випадку саме встановлення вихідного дерева (інструмента візуалізує git repo), яке нелогічно створило під папкою документів gitignore_global.txt, яке включало безліч виключень.
Механічний об’єкт

Мені було Icon?проігноровано ту саму прокляту .
Джастін Скілз

Так було для мене. У глобальному файлі ігнорування було досить багато правил. Дякую за підказку +1
Божевілля

Я мав * .json в моєму глобальному ігнорі - говорити про кошмар - дякую!
Джейсон Перфетто

31

Перевірте це:

  1. Ви шукали інші файли .gitignore, оскільки їх може бути багато.

  2. Також подивіться на REPO / .git / config, щоб побачити, чи є щось там.

  3. Репо виключити локальні правила за репо, можна додати у файл .git / info / виключити у вашому репо. Ці правила не виконуються з репо, тому їх не поділяють з іншими. Цей метод може бути використаний для локально створених файлів, які ви не очікуєте, що інші користувачі генерують, як файли, створені вашим редактором.


У сховищі немає інших файлів .gitignore, а також у файлі .git / config нічого, що б ігнорувало. Як налаштовано .git / info / виключити?
Ян Хантер

4
Не ясно, чому ця відповідь позначається як відповідь. Як саме було вирішено це питання?
Наступний розробник

виключити було моєю проблемою. Я знав, що є інший спосіб ігнорувати, який я використовував у минулому, але забув, де це було!
Чаккі

22

У мене була та сама проблема - git із цією помилкою ігнорував каталог:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

Нарешті я зрозумів, що моя проблема є рядком у моєму ~/.gitignore_global:

TAGS

яка відповідала шляху app/views/admin/tags. Я виправив це, додавши провідну косу рису в глобальний файл gitignore

/TAGS

і git знову почав відстежувати мій каталог.


3
+1 для того, щоб змусити мене шукати часткові збіги ... gitignore_global.txt містив "[Rr] elease * /", що викликало ігнорування мого каталогу "releasenotes".
Трев

Щоб зробити це ще складніше, git буде ігнорувати лише нещодавно додані файли, а не ті, які вже є у репо. Отже, коли я додав "foo /" до свого .gitignore, він ігнорував лише нещодавно додані файли у підкаталогах foo та не у всіх файлах. Мені потрібна година, щоб зрозуміти, чому деякі файли ігноруються, а інші - не.
ccleve

У мене така ж проблема. SourceTree встановлює ~ / .gitignore_global файл в меню Інструменти-> Параметр пункт-> вкладка Git. Після того, як я очистив поле Global Ignore list, команда "git add ..." запрацювала.
Кейт

У мене було те саме питання. У мене був helpкаталог, який ігнорували. На щастя, я знайшов вашу відповідь досить швидко.
Абдул Садік Ялцін

9

Для мене випадково у моєму файлі ~ / .gitignore_global був підстановочний код. Може там перевірити?


1
Саме це було для мене питанням. Я мав * .png там, не знаю, як він туди потрапив.
Шахар

3

Ще слід спробувати: у мене був каталог B із власним .gitсховищем, вкладеним під каталог мого проекту A (але не як підмодуль). Я вніс деякі зміни в B і хотів перетворити його на підмодуль бонафіду. Я вважаю, що git A автоматично ігнорує B, оскільки він містить власне сховище (див. Вкладені сховища git без підмодулів? ). Я перейменував папку B і спробував її знову клонувати як підмодуль, і це принесло мені оманливе повідомлення про помилку "проігноровано .gitignore". Рішенням було видалення .gitз Б.


2

У мене була така ж проблема, як у вас. Єдина відповідь, яку ви отримали, перелічила кілька місць для перевірки, але жодне з них не вирішило проблему для мене, і з вашого коментаря я також не думаю для вас. У мене не було ДРУГИХ файлів .gitignore, які ховалися нижче в дереві каталогів; нічого в .git / config; нічого в .git / ingore / виключити

Якщо проблема все ще виникає, перевірте цю відповідь . Це вирішило для мене питання

В основному, перевірте наявність файлу ~ / .gitignore. Шахта називалася ~ / .gitignore_global. Я не знаю, коли він був створений ( я, звичайно, не встиг), але я спробував безліч різних налаштувань git, коли я вперше встановив, так що один з них, мабуть, помістив його.

Сподіваюся, що його відповідь і вам допоможе!


1

Ще одна причина отримання цього повідомлення про помилку від git - це коли виконувати git submodule addкоманду, коли попередня команда git зазнала аварії та залишила файл блокування (це може статися, наприклад, коли ви використовуєте власні скрипти, які включають команди git, і ви не помітили крах).

Якщо ви виконаєте команду git commitзамість цього, хоча жодна з умов не змінилася ( git submodule addбуде кричати, що ваші .gitignoreфайли винні), ви побачите інший звіт про помилку:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

і дійсно видалення файлу блокування:

rm .git/index.lock

вирішує питання. (Це трапляється з версією git 2.1.0.9736. Це може бути виправлено у майбутніх випусках git.)


Завдяки цьому виявилося те, що у мене виникло. Рятувальник життя!
JDawgg

1

Перевірте, чи маєте ви дозвіл на папку. Я щойно натрапив на це, і це було тому, що папкою належав користувач www-data, а не той користувач, як я був увійшов до терміналу.


1

У моєму випадку саме пряма коса на моєму шляху викликала проблему ...

Не працює

/srv/bootstrap/

Робота

srv/bootstrap/

1

І ще одне: якщо каталог, у якому ви перебуваєте, потребує кореневого доступу для написання чи виконання, переконайтеся, що ви користуєтеся кореневим користувачем. Насправді я отримав дивну помилку, коли я намагався додати підмодуль, і git продовжував скаржитися, що шлях, який я клонував, ігнорується файлом ігнорування git. Потім я змінив на root користувача, запустив додавання підмодулю і знову не виникло проблем.


0

Також перевірте, ~/.gitignoreа ~/.gitignore_globalщо можуть бути створені деякими клієнтами Git (наприклад, Atlassian SourceTree на Mac OS X).


0

Переконайтесь, що .gitignoreфайл не ігнорує себе. Поширеною помилкою є додавання *до .gitignoreфайлу правила, щоб ігнорувати кожен файл у поточній папці. Рішенням цього є додавання виключення до .gitignore:

*
!.gitignore

Таким чином, всі файли в каталозі будуть ігноровані, за винятком .gitignore.

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