Почему gitignore не работает в этом случае? - PullRequest
17 голосов
/ 16 ноября 2011

У меня есть два файла, которые я хочу игнорировать:

  • .idea / workspace.xml
  • someapp / SRC / .idea / workspace.xml

Я думал, что добавления этого единственного правила в .gitignore будет достаточно:

* * 1010

Но он перехватывает только файл верхнего уровня .idea / workspace.xml (состояние git показывает, что someapp / src / .idea / workspace.xml не отслеживается).

Я также пытался **/.idea/workspace.xml, но это не работает вообще. Помощь

Ответы [ 5 ]

21 голосов
/ 24 октября 2013

Изменено в git 1.8.4

Использование функции платформы fnmatch (3) (многие места, такие как сопоставление путей, .gitignore и .gitattributes) были замененыс wildmatch, позволяя "foo / ** / bar" соответствовать "foo / bar", "foo / a / bar" и т. д.

**/.idea/workspace.xml теперь должно работать в этом примере.

11 голосов
/ 16 ноября 2011
  • […]
  • Если шаблон не содержит косую черту /, git обрабатывает его как шаблон оболочки и проверяет совпадение с путевым именем относительно местоположенияФайл .gitignore (относительно верхнего уровня рабочего дерева, если не из файла .gitignore).
  • В противном случае git рассматривает шаблон как глобус оболочки, подходящий для использования fnmatch (3) с флагом FNM_PATHNAME: подстановочные знаки в шаблоне не будут совпадать с / в пути.[…]

Как только путь содержит косую черту, Git больше не будет проверять совпадение в пути, а вместо этого будет напрямую использовать поведение glob.Таким образом, вы не можете соответствовать для .idea/workspace.xml, но только для workspace.xml.

Git manual: gitignore .

5 голосов
/ 16 ноября 2011

См. Примеры в руководстве gitignore:

«Documentation / *. Html» соответствует «Documentation / git.html», но не «Documentation / ppc / ppc.html» или »tools / perf / Documentation / perf.html"

Так что .idea/workspace.xml будет соответствовать корневому, но не someapp/src/.idea/workspace.xml

Но в зависимости от вашей реализации fnmatch, это то, что вам нужно в вашем .gitignore:

.idea/workspace.xml
**/.idea/workspace.xml
2 голосов
/ 24 ноября 2011

попробуйте

/**/.idea/workspace.xml

0 голосов
/ 16 ноября 2011

Согласно справочной странице gitignore:

Шаблоны, считанные из файла .gitignore в том же каталоге, что и путь, или в любом родительском каталоге, причем шаблоны в файлах более высокого уровня (вплоть до верхнего уровня рабочего дерева) переопределяются таковыми из файлов более низкого уровня в каталог, содержащий файл. Эти шаблоны соответствуют относительно местоположения файла .gitignore. Проект обычно включает такие файлы .gitignore в свой репозиторий, содержащие шаблоны для файлов, созданных как часть сборки проекта.

(акцент мой)

...