2013-05-27 19 views
5

Ich bin überrascht, dass einfache Muster wie * .user in einer .gitignore-Datei scheinen Dateien und Ordnernamen übereinstimmen.Wie gitignore * nur * Dateien?

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) 

Habe ich falsche Erwartungen? Wie kann ich eine einfache ignorieren Dateien mit der Erweiterung Blah und verhindern, dass Ordner mit der Endung .blah übereinstimmen? Die gitignore man page erwähnt, dass Muster ohne ein/sind mit Shell-Glob-Muster-Funktionalität abgestimmt, aber es sagt mir nicht wirklich, ob es nur Dateien oder Dateien und Verzeichnisse entspricht.

Antwort

18

.gitignore Muster stimmen nur mit Verzeichniseinträgen oder Pfaden überein. Es gibt keine spezielle Möglichkeit zu sagen "Nur einer regulären Datei entsprechen". Wenn Sie jedoch eine nachgestellte / angeben, wird das Muster nur mit einem Verzeichnis übereinstimmen. Sie können dies verwenden, um Nicht-Verzeichnisse (was fast das ist, was Sie wollen) mit zwei Mustern abzugleichen:

*.user  # ignore all paths ending in '.user' 
!*.user/ # but don't ignore these paths if they are directories. 
Verwandte Themen