2009-08-14 172 views
123

我的程序通常會生成巨大的輸出文件(〜1 GB),我不想備份到git存儲庫。因此,而不是能夠做有沒有辦法告訴git只包含某些文件而不是忽略某些文件?

git add . 

我必須做一些像

git add *.c *.cc *.f *.F *.C *.h *.cu 

這是一個有點繁瑣......

我覺得相當有信心,我可以寫一個Perl的quicky腳本將目錄內容放入.gitignore中,然後根據.gitinclude(或某個類似的名稱)文件移除文件,但這看起來有點太過分。有沒有更好的辦法?

回答

159

我沒有必要自己嘗試一下,但從我的TFM閱讀中,它看起來像一個否定模式會做你想要的。您可以使用稍後取消的條目覆蓋.gitignore中的條目。因此,你可以這樣做:

*.c 
!frob_*.c 
!custom.c 

把它忽略除custom.c和任何開頭「frob_」

+14

謝謝測試, TED這工作。我所要做的只是使用*開始.gitignore文件,然後列出所有包含文件模式的感嘆號。 – 2009-08-14 19:44:48

+5

如何處理文件夾?我無法找到一種通過否定規則來包含文件夾和文件的方法。 – 2013-10-30 16:24:05

+1

關於文件夾請檢查http://stackoverflow.com/questions/12799855/configure-git-to-track-only-one-file-extension – uzsolt 2014-07-16 05:48:44

58

創建資源庫的.gitignore文件中的所有.c文件,你只想跟蹤C文件,而忽略其他所有文件,然後將下列行添加到它....

* 
!*.c 

「*」會忽略所有的文件

和!將否定的文件是忽略了....所以這裏我們要求的git不會忽略C文件....

+0

您是否還需要隱藏文件的'。*'? – trusktr 2013-06-04 05:42:45

+1

即使'.'也是通配符,所以隱藏文件也會被忽略,但是所有以'.c'結尾的隱藏文件都包含在內。 – Rohmer 2014-04-26 01:38:51

+2

使用這種方法,我認爲來自子文件夾的文件也被忽略。檢查此更多詳細信息http://stackoverflow.com/a/11853075/739436 – popas 2015-05-04 07:38:16

2

最好的解決方案來實現這一

在倉庫root創建.gitignore文件,如果你想只包括.c文件,那麼你需要下面幾行添加到.gitignore文件

*.* 
!*.c 

這將包括從目錄和子目錄中的所有.c文件遞歸。

使用

* 
!*.c 

將無法​​在所有版本的git的工作。

測試在

Git版本2.12.2.windows.2

+0

是的,我和'*'有同樣的問題,不得不使用'*。*'。這是在Windows上使用gitbash和git版本2.9.0.windows.1 – 2017-07-07 04:01:52

0

使用這gitignore

*.* 
!*.c 

使用Git版本2.7.4

相關問題