2009-08-08 164 views
165

我想忽略存儲庫中的所有文件,除了發生在bin子目錄中的文件。我嘗試添加以下到我的.gitignore如何讓Git忽略除子目錄以外的所有內容?

* 
!bin/* 

這不會收到預期的效果,但是:我創建的bin/內一個新的文件,但這樣做git status仍顯示nothing to commit (working directory clean)

有什麼建議嗎?

+0

可能重複的[.gitignore排除文件夾,但包括特定的子文件夾](http://stackoverflow.com/questions/5533050/gitignore-exclude-folder-but-include-specific-subfolder) – 1615903 2017-03-30 13:51:16

回答

212

這忽略根文件&根目錄,然後取消忽略根bin目錄:

/* 
/*/ 
!/bin/ 

這樣,你得到所有的bin目錄包括子目錄及其文件。

+13

出於某種原因,這並不始終如一地爲我工作。我有兩行'/東西/'和'!/材料/特定/',但它仍然忽略/材料/特定/ – 2013-11-18 00:00:12

+1

@ LB--我也有類似的問題,'混帳檢查忽略-v'告訴我這是因爲'〜/ .gitignore' – 2014-08-25 12:32:45

+0

@gurneyalex我發現它自我修復,如果我刪除本地回購,並重新克隆它,它必須是一個錯誤。 – 2014-08-25 18:44:30

36

你唯一的問題是bin目錄本身不匹配bin/*模式,所以git甚至不在bin目錄中查找。

有兩種解決方案值得思考。

.gitignore

* 
!/bin/ 
!bin/* 

.gitignore

* 
!/bin/ 

bin/.gitignore

!* 

我喜歡的S作爲第一個解決方案的第二個解決方案不會停止忽略bin目錄中不在名爲bin的子目錄中的文件。這可能會或可能不會影響您的情況。

+2

沒有爲我工作。我必須有這樣的的.gitignore,使其工作: '#不顧一切 * #但是沒有這些文件... /可溼性粉劑內容/ /可溼性粉劑內容/插件/ ! !/可溼性粉劑內容/插件/ my_plugin/ !/可溼性粉劑內容/插件/ my_plugin/*' 沒有塊註釋代碼? – xlttj 2012-02-28 08:26:36

+1

[泰勒的回答(http://stackoverflow.com/a/8594971/165673)具有更好的單個文件的解決方案 – Yarin 2012-07-17 12:02:56

10

我認爲更好的辦法是用斜線啓動模式定位每個圖案頂端的git目錄:

/* 
!/public_html 
!/.gitignore 

而不是忽略所有的文件,它只會忽略頂層的文件,而不是在你不想忽略的目錄中。

6

.gitignore作品對我來說:

*/ 
/* 
!bin/ 
74

這裏如何在某個目錄不顧一切exept一個目錄 「MY_SUPER_DUPER_TEMPLATE_directory

結構:/的Bitrix /模板/ MY_SUPER_DUPER_TEMPLATE_directory

/* 
!/bitrix 
/bitrix/* 
!/bitrix/templates 
/bitrix/templates/* 
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory 
*.DS_Store 
*.gitignore 
+1

這解決了我的子子目錄。謝謝 – frostymarvelous 2015-03-03 00:06:50

+5

的作品。什麼東西不傷害眼睛? – ed22 2016-06-01 04:58:43

+0

這工作奇蹟,取消了我已修改的laravel供應商包!謝謝你,爲了包括一個目錄,然後,排除它的內容,然後,包括所需的子目錄等原理,你爲我節省了很多頭痛 – 2017-05-04 07:48:46

41

您必須在途中排除一切目的地,但你必須包括目的地:

/* 
!/tsp 
/tsp/* 
!/tsp/src 
/tsp/src/* 
!/tsp/src/*.h 
!/tsp/src/*.cpp 
!/tsp/src/data.txt 
!/.gitignore 

忽略除tsp目錄外的所有內容,忽略tsp目錄中的所有內容,除了src目錄...

+9

+1。我最終在我的項目中使用了這個答案。 – 2013-09-06 15:54:55

10

請嘗試關注最新的GIT版本。

* 
!*/ 
!/path/to/your/dir/** 
+0

它實際上應該是!/ path/to/your/dir/**最後一行 – faham 2016-09-10 04:42:14

+0

@faham,是的,只是加了它。 – Kirby 2016-11-30 13:20:45

5

試試這個不起眼的git bug。

!bin**/** 

希望它能幫助:)

支持文檔git bug sample

PS:第一註解之前嘗試。

9

從官方git doc,其中一個例子說:

例排除除了特定的目錄富/條(注意/ *一切 - 沒有斜槓,通配符也將排除foo中的一切/條):

$ cat .gitignore 
# exclude everything except directory foo/bar 
/* 
!/foo 
/foo/* 
!/foo/bar 

有關前導斜槓的說明:When to use leading slash in gitignore

相關問題