2011-02-23 113 views
54

我最近開始使用Git,並且遇到了一件事情。如何跟蹤目錄而不跟蹤其內容?如何使用Git跟蹤目錄但不跟蹤他們的文件?

例如,我正在處理的網站允許上傳。我想跟蹤上傳目錄,以便在分支等時創建它,但顯然不是其中的文件(在開發分支中測試文件或在主文件中是真實文件)。

在我的.gitignore我有以下幾點:

uploads/*.*

也嘗試過(其中忽略了整個目錄):

uploads/

該目錄還可能包含子目錄(上傳/大拇指/上傳/視頻/)我希望能夠跟蹤這些,但不是他們的文件。

這可能與Git?我到處搜索而沒有找到答案。

+0

Git只跟蹤文件。你可以做的就是使用git鉤子,並跟蹤一個包含目錄列表的文件(使用鉤子自動生成)。雖然我不完全確定這是否可能。 – 2011-02-23 12:49:58

+0

更具體:Git跟蹤_content_和(for git)空目錄不是內容。你可以爭論,不管你是否同意,但作爲另一種「解決方法」,你可能會考慮在build/install/when-needed上創建目錄。但是:我使用「'.placeholder'-file」 - 解決方案也;) – KingCrunch 2011-02-23 13:00:11

+0

而不是使用.placeholder,我使用.gitignore文件。這不僅處理目錄中的排除事項,而且它本身充當佔位符。 – Abizern 2011-02-23 13:04:43

回答

72

Git不跟蹤目錄,它跟蹤文件,因此爲了達到這個目的,你需要跟蹤至少一個文件。因此,假如你.gitignore文件看起來是這樣的:

upload/* 

你可以這樣做:

$ touch upload/.placeholder 
$ git add -f upload/.placeholder 

如果您忘記了-f你會看到:

 
$ git add upload/.placeholder 
The following paths are ignored by one of your .gitignore files: 
upload 
Use -f if you really want to add them. 
fatal: no files added 

然後,當你做git status你會看到:

 
# On branch master 
# 
# Initial commit 
# 
# Changes to be committed: 
# (use "git rm --cached ..." to unstage) 
# 
# new file: upload/.placeholder 
# 

很明顯,你可以再做:

$ touch upload/images/.placeholder 
$ git add -f upload/images/.placeholder 
+0

謝謝,這正是我需要的。 – Ben 2011-02-23 13:03:18

+8

佔位符的通用約定是gitignore文件。 – Cascabel 2011-02-23 14:53:55

+2

@Jefromi事實上,正如我對Abizern的評論,從未考慮過使用'.gitignore'文件作爲佔位符。 – 2011-02-23 15:38:45

31

我寫的這個here

在目錄中添加一個.gitignore。

+1

好的小文章和評論!從未考慮使用.gitignore作爲佔位符文件.... – 2011-02-23 13:03:24

+0

謝謝。我通過寫一篇文章並獲得評論來學到了一些東西。 – Abizern 2011-02-23 13:07:01

+0

現在似乎有一個流行的命名慣例使用'.gitkeep' – tarabyte 2014-03-07 00:33:59