2013-05-27 2 views
5

Я удивлен, что простые шаблоны, такие как * .user в файле .gitignore, похоже, соответствуют файлам и именам папок.Как gitignore * только * файлы?

ringods$ mkdir TestIgnore 
ringods$ cd TestIgnore/ 
ringods$ git init 
Initialized empty Git repository in /Users/ringods/Projects/hostbasket/TestIgnore/.git/ 
ringods$ git status 
# On branch master 
# 
# Initial commit 
# 
nothing to commit (create/copy files and use "git add" to track) 
ringods$ mkdir security.user 
ringods$ touch security.user/file_may_not_be_ignored.txt 
ringods$ git status 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# security.user/ 
nothing added to commit but untracked files present (use "git add" to track) 
ringods$ echo "*.user"> .gitignore 
ringods$ cat .gitignore 
*.user 
ringods$ git status 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# .gitignore 
nothing added to commit but untracked files present (use "git add" to track) 

Есть ли у меня неправильное ожидание? Как я могу написать простой файл игнорировать файлы с расширением blah и предотвратить папки, заканчивающиеся на .blah соответствует?

gitignore man page упоминает, что шаблоны без// сопоставляются с использованием функций шаблона оболочки glob, но на самом деле это не говорит мне, соответствует ли это файлам только файлам или файлам и каталогам.

ответ

18

.gitignore шаблоны просто соответствуют каталогам или дорожкам. Нет никакого конкретного способа сказать «только совпадение с обычным файлом», однако если вы предоставите конечный /, тогда шаблон будет соответствовать только каталогу. Вы можете использовать это, чтобы сопоставить не-каталоги (что почти то, что вы хотите) с двумя шаблонами:

*.user  # ignore all paths ending in '.user' 
!*.user/ # but don't ignore these paths if they are directories. 
Смежные вопросы