2009-06-09 4 views
18

Я использую msysgit и имею дерево проекта, которое содержит много bin/folders в дереве. Используя файл .gitignore в корне проекта, мне нужно игнорировать все DLL-файлы, которые находятся внутри корзины/папки в любом месте дерева проекта. Я пробовал «bin/*. Dll», но это не работает, я предполагаю, что он работает только с bin/folder в корне проекта.Git - Игнорировать определенные файлы, содержащиеся в определенных папках

+0

Я подтверждаю, что «git add -dry-run * .dll» добавляет не игнорируемый DLL. Не могли бы вы разместить содержимое вашего файла .gitignore? – VonC

+0

Вы правы: '**/bin/*. Dll' работает только для 'x/bin/z.dll' (глубина 2), а не 'x/y/bin/z.dll' (глубина 3). Взгляни сейчас. – VonC

+0

Я не уверен, что поддержка гитиорного шаблона поддерживает рекурсивное обнаружение каталогов ... Я внесла поправки в свой ответ. – VonC

ответ

9

Обновление августа 2016 (семь лет спустя, Git 2.9.3/Git 2,10)

**/bin/*.dll 

Это делает работу на любой глубине.


Оригинальный ответ (2009, Гит 1,6)

ли вы попробовать:

**/bin/*.dll 

Это делает работу с моим msysgit1.6.3 (с .gitignore файл в корневом каталоге Git Рабочее пространство).

Фактически вышеизложенное игнорирует только «x/bin/z.dll», а не «x/y/bin/z.dll».

Другой синтаксис может быть:

**/*/bin/*.dll 

Но что бы получить только глубину 3, не глубина 2!

Так что, если вы не слишком много места, где * .dll должны быть проигнорированы, самое простое решение, все равно будет локальный файл .gitignore в этих каталогах «БИН» ...

Или коллекция директива, чтобы покрыть основные первые глубины:

bin/*.dll 
**/bin/*.dll 
**/*/bin/*.dll 
**/**/*/bin/*.dll 

и так далее, все в одном файле .gitignore.

+0

Я использую msysgit 1.6.3, но шаблон **/bin/* .ll не работал. Я добавил этот шаблон в мой .gitignore в корне, а затем попытался «git add -dry-run * .dll» из корневого каталога, и он перечислил мои файлы .dll, содержащиеся в bin/folders моего дерева проектов. – 2009-06-09 19:49:41

13

У меня только /bin в моем файле и, похоже, сработает. Он игнорирует всю папку (в отличие от конкретных файлов)

Вот полное содержание на данный момент (все еще развивается).

.svn* 
obj/ 
bin/ 
*.suo 
*.user 
Log/ 
log/ 
*.db 
+0

Работает. по крайней мере для меня. git версия 1.7.2.5 –

+0

есть. отлично! работает для меня тоже – gpol

0

*/бен работал для меня

Я думаю, что */бен/будет также.

+0

Это работает только с глубиной 1: http://www.kernel.org/pub/software/scm/git/docs/gitignore.html «подстановочные знаки в шаблоне не совпадают с/в пути» – I82Much

+0

так что будет работать? \ */Bin \ *? Думаю, я сделал это позже ... для другого каталога. – rball

14

У меня была аналогичная проблема и реализовано: файлы уже были добавлены и отмечены в git.

Как распознать разницу: Git не показывал файлы как «новые», а как «измененные». Эта информация обошлась мне довольно давно ...

Если это проблема, просто «git rm» эти файлы и начните сначала. Внезапно, .gitignore начинает работать, как ожидалось.

+1

это сработало для меня, но это самая тупая вещь, которую я должен был сделать с участием Git. – BryanGrimes

+0

git rm -f -r/path # для удаления и удаления папки. – tgkprog

4

.gitignore на окнах, похоже, не работает. Я использую msysgit v 1.7.6 beta, и он просто не работает так, как он должен на странице .gitignor man. Теперь, если я скопирую содержимое моего файла .gitignore в файл $ GIT_DIR/info/exclude, внутри репо все будет работать.

Итак, облом, что это не реплицируется, но это лучше, чем ничего.

+0

Это сработало! Я использую github для окон –

Смежные вопросы