2013-05-27 26 views
5

Tôi ngạc nhiên rằng các mẫu đơn giản như * .user trong tệp .gitignore dường như khớp với các tệp tên thư mục.Làm cách nào để gitignore * chỉ * tệp?

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) 

Tôi có kỳ vọng sai không? Làm cách nào để viết một tệp đơn giản bỏ qua với phần mở rộng blah và ngăn các thư mục kết thúc bằng .blah được khớp?

gitignore man page đề cập rằng các mẫu không có/được khớp với chức năng mẫu vỏ sò, nhưng nó không thực sự cho tôi biết nếu nó chỉ khớp với tệp hoặc tệp và thư mục.

Trả lời

18

.gitignore mẫu vừa khớp với mục nhập hoặc đường dẫn thư mục. Không có cách cụ thể để nói "chỉ khớp với một tệp thông thường", tuy nhiên nếu bạn cung cấp một dấu sau / thì mẫu sẽ chỉ khớp với một thư mục. Bạn có thể sử dụng tính năng này để khớp với các thư mục không phải (gần như bạn muốn) với hai mẫu:

*.user  # ignore all paths ending in '.user' 
!*.user/ # but don't ignore these paths if they are directories. 
Các vấn đề liên quan