2011-11-27 133 views
4

有一些我們想要忽略的文件,而不是由git跟蹤,我們無法弄清楚如何做到這一點。git如何配置爲忽略文件?

我們有一些第三方的C圖書館是解壓縮的,我們在Git中有它。但是,當你configure && make它,它會產生許多新的文件。如何編寫.gitignore來跟蹤源文件,而不是新的東西。 (它不像禁止*.o

編輯:至少有12個文件類型。所以我們不想枚舉,我們想要哪種類型,哪種不需要。

+5

然後你想如何讓git知道你想要什麼文件,你不?你知道,它無法讀懂你的想法... –

+3

它是*完全好*有一個30行.gitignore。 – Cascabel

+3

如果你真的會在你問的時候忽略所有新事物,那麼它很容易在腳中拍攝自己,並忘記跟蹤某些事物。明確指定要忽略的文件的唯一代價是所有12個文件,gitignore將會延長11行。你永遠不會看它。你會寫12行代碼來正確解決問題,不是嗎? – Cascabel

回答

6

使用!來包含您需要的所有類型的文件。像下面的例子」

* 
!*.c 
!*.h 
+0

什麼是「!」運營商?我第一次聽說它。 – drozzy

+1

@drozzy:它是一個可選的前綴,否定模式 –

3

明確指定哪些文件應該被跟蹤,並忽略所有其他人可能是一個解決辦法。*說:不顧一切和後續行指定的文件和目錄應該忽視。允許使用通配符。

* 
!filename 
!*.extension 
!directory/ 
!/file_in_root_directory 
!/directory_in_root_directory 

記住順序的問題。在年底把*讓以前所有的線是無效的。

看看man gitignore(5)並搜索!。它說

模式具有以下格式:

  • (...)

  • 可選前綴否定該模式;任何先前模式排除的匹配文件將再次包含在內。如果否定模式匹配,這將覆蓋較低優先模式源。

+0

請將「示例」複製到帖子中。如果鏈接死亡 - 這個答案是沒用的。 – drozzy

0

我不知道爲什麼你說「它不是像禁止*.o」,但我覺得你的意思是,有沒有您可以識別應用到生成的文件,但沒有任何好的模式源文件?如果只是出現幾件事情(比如在Linux上通常沒有任何擴展的單個可執行文件),則可以在.gitignore中明確指定它們,所以它們不是問題。

如果確實有很多很多的文件是由構建過程生成的,它們與源文件共享擴展名和其他模式,那麼只需使用包含源文件的模式即可。如果真的那麼糟糕,你甚至可以把*放在.gitignore。這意味着當您鍵入git status時,不會顯示新文件,或者在使用git add .時添加文件,但它不會損害已添加到存儲庫的任何文件; git仍然會告訴你有關他們的更改,並在你使用git add .時提取它們。它只會讓你明確開始跟蹤你所關心的文件更多的負擔。

0

我會確保回購清潔(沒有更改,沒有未跟蹤的文件),運行configure && make,然後將新的未跟蹤的字段放入忽略文件。像git status --porcelain | fgrep '??' | cut -c4-這樣的東西會自動拉出來,但它是值得一些眼球的時間,以確保是正確的...