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.