2011-11-06 37 views
50

有已經類似於這樣幾個問題,但沒有一個答案爲我工作。的.gitignore忽略所有文件,然後遞歸允許*包含.foo

我想忽略我下面的資料庫中的文件夾以外的所有帶*包含.foo

(如果你想知道如何能夠合理的文件 - 我其實是做一個Git倉庫爲我所有的「邏輯」項目 - 在Mac上的音樂軟件 - 但我只想要存儲實際的項目文件*。邏輯)

我要拼出來,所以我們都在同一塊板上。 這是我做的,從頭開始:

設置:

mkdir temp 
cd temp 
mkdir testdir 
cd testdir 
touch include.foo 
touch dontinclude.bad 
cd.. 
git init 
touch .gitignore 

這在粘貼的.gitignore

# Ignore all 
/* 

# But not these files... 
!.gitignore 
!*.foo 

git的狀態

而唯一未跟蹤文件是.gitignore

如果我輸入「git add」。 - 沒有改變,只有.gitignore被看到,我的2個文件被忽略。

爲什麼沒有這個工作,你如何可以改變上面的程序,使其工作?

這裏是非常類似的問題,我從拿到的.gitignore文件。 我使用的git --version 1.7.7(也試過1.7.3) - .gitignore to ignore all files, then recursively allows files of a certain type

+0

等一下,你'GIT中添加.gitignore'和'git的承諾-m 「添加gitignore」'? – Nic

回答

96

你的問題是,在開始/*模式匹配在頂層的所有文件和目錄 - 包括testdir,所以testdir中的所有內容都將被忽略。

這是你想要什麼:

# Ignore everything 
* 
# Don't ignore directories, so we can recurse into them 
!*/ 
# Don't ignore .gitignore and *.foo files 
!.gitignore 
!*.foo 

當你做一個git add .這個配置,你會發現你只有.gitignore*.foo列爲被提交的修改文件。

+0

儘管如此,在我的現實世界版本中使用.logic文件,它神祕地不起作用。我重新創建了git repo,檢查了一百萬次,完全複製.gitignore,更改爲.logic,查找。 -name「* .logic」返回堆的文件,但這個.gitignore忽略所有的* .logic文件...一些愚蠢的事情肯定會發生......當我最終破解它時可能值得跟進評論 – PandaWood

+0

@PandaWood:確保你沒有'〜/ .gitconfig'中的'core.excludesfile'設置指向一個文件,該文件的模式會排除你的'* .logic'文件。 – camh

+0

我沒有得到這個,但當我試圖將這些.logic文件上載到DropBox時,我得到了一個提示,它失敗了。另一個提示是,我添加了!* .txt到.gitignore,因爲我有幾個文本文件,並且他們開始出現在跟蹤列表中,不用擔心。所以邏輯「文件」(例如bla.logic)實際上是「軟件包」 - 您在Mac Finder中點擊並選擇「顯示軟件包內容」 - 因此git中的* .logic無法正常工作......我怎麼能將這些「文件」存儲在git中,可能是我的下一個問題;-) – PandaWood