2010-03-30 310 views
249

我的.Net解決方案中有很多項目。我想排除所有「bin/Debug」和「bin/Release」文件夾(及其內容),但仍包含「bin」文件夾本身及其中包含的任何dll。Git忽略子文件夾

。「bin /」.gitignore忽略「Debug」和「Release」文件夾,但也包含「bin」文件夾中包含的任何dll。

.gitignore文件中的「bin/Debug」或「bin/Release」不會排除這些目錄,除非我完全限定忽略模式爲「Solution/Project/bin/Debug」 - 我不想要這樣做,因爲我需要在我的解決方案中爲每個項目包含這種完整模式,並且爲添加的任何新項目添加它。

有什麼建議嗎?

+0

爲什麼要添加DLL的?如果您引用的是第三方DLL,那麼添加一個所有項目隨後引用的通用文件夾可能是有意義的。 – Paddy 2010-03-30 13:39:38

+4

Paddy的權利 - 如果這些是第三方DLL,他們可能應該遠離您的代碼。不過,對我來說,這聽起來像是在檢查自己的構建產品,這通常不是您想要的方式。你使用git來跟蹤代碼和構建配置中完全包含的*信息*。產品就是產品。跟蹤他們正在尋找麻煩 - 例如,如果您更改代碼但忘記了構建和檢查新產品會怎麼樣? – Cascabel 2010-03-30 15:02:36

+0

我在排除子文件夾時遇到了問題。試了一下,包括這裏寫的確切樣本,但沒有成功。最後,我在文件夾模式之間添加了一個額外的空白行,並且它正在工作。也許是一個編碼問題。我有窗口,並以UTF8編碼。 – RoadBump 2012-10-10 03:29:38

回答

321

你試過通配符嗎?

Solution/*/bin/Debug 
Solution/*/bin/Release 

使用Git的1.8.2版本中,您還可以使用通配符**匹配子目錄中的任何級別:

**/bin/Debug/ 
**/bin/Release/ 
+7

它的工作原理,除非在例如另一個項目中有一個子文件夾。解決方案/模塊/項目,所以現在我已經添加了/ */*/bin/Debug和/ */*/*/bin/Debug(用於子文件夾)。看起來您必須爲目錄結構中的每個級別添加通配符子文件夾。 – Marcel 2010-03-30 14:08:49

+0

@Marcel:那麼,git肯定不會忽略任何你不告訴它的文件 - 它會忽略與通配符匹配的任何文件,不會更多,也不會少。 – Cascabel 2010-03-30 14:59:16

+0

我認爲雙星會跨越目錄界限,即:/ **/bin/Debug – Taras 2011-12-29 23:07:37

84

可以使用的.gitignore在頂層忽略所有目錄該項目具有相同的名稱。例如:

Debug/ 
Release/ 

這應該立即更新,以便在執行git狀態時可見。確保這些目錄尚未添加到git中,因爲這將覆蓋忽略。

+0

將模式添加到OP $'GIT_DIR/.git/info/exclude'文件中也可以做到這一點。 – 2010-03-30 20:14:22

+1

區別在於.gitignore文件將遵循代碼,因此適用於任何地方。而排除文件僅對您的存儲庫是本地的,這意味着它僅適用於特定存儲庫。除非其他提交者有理由要提交這些目錄,否則我會推薦使用.gitignore。 – Andreas 2010-03-31 05:27:07

+1

此問題的另一個問題是,如果您的解決方案中有一個名爲Debug的項目,那麼該項目也將被忽略。我認爲解決方案是所有答案和評論的組合 - 重新構建解決方案以將常見或引用的dll保存在不同的文件夾中,然後忽略「bin /」和/或使用通配符。 – Marcel 2010-04-01 10:08:24

38

問題不在於忽略所有子目錄,而是我無法在任何地方找到答案,所以我會發布它:*/*

+1

您有任何可以澄清的機會嗎?我已經嘗試了各種各樣的變體,並且無法通過'git add'來忽略該目錄的所有子目錄中的目錄和所有文件。 dirname/*,* dirname/*,* dirname/*,dirname/**','dirname/*/*'/*','dirname/*/*/*/*/*'。 – Chris 2014-11-20 17:13:36

+2

'*/*'忽略當前目錄中的所有子目錄,但不包含文件。忽略特定的子目錄是正常的gitignore用法。 'dirname','dirname /'和'dirname/*'都適用於我。該目錄中的任何內容是否已經提交? – mgold 2014-11-21 03:18:20

+0

這是一個全新的回購 - 我嘗試刪除整個'.git'目錄,然後'git init',然後'git add --all .'(也嘗試不用'--all'),使用1.9.4 .msysgit.1。我的命名目錄下的每個非空子目錄都被添加到索引(在TortoiseGit和'git status'中檢查)。 '.gitignore'中沒有相關的行開始'!'但必須有一些衝突。現在通過在「add」期間刪除文件夾解決。猜猜這是需要多一點挖掘才能提供必要的信息來診斷的東西。謝謝你讓我放心,我不會誤解語法。 – Chris 2014-11-21 14:51:06

21

以上所有答案都是有效的,但我不認爲提到的是,一旦您將該目錄中的文件添加到回購站中,就不能忽略包含該文件的目錄/子目錄(git將忽略該指令)。您必須首先從回購目錄中刪除目標目錄中的所有文件,然後您可以忽略該文件夾。

+5

git rm --cached如果你想讓它們跟蹤/不相關的歷史,但要保持文件在本地完好。 – 2015-05-30 21:04:00

+0

謝謝你的回答 - 它幫了我很多!它說明了git糟糕的另一個原因。 – user949300 2018-03-06 18:29:40

12

我得到這個我的機器上工作的唯一方法就是做這種方式:

# Ignore all directories, and all sub-directories, and it's contents: 
*/* 

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't): 
/*.* 

#Only Include these specific directories and subdirectories: 
!wordpress/ 
!wordpress/*/ 
!wordpress/*/wp-content/ 
!wordpress/*/wp-content/themes/ 

注意如何有明確允許您要包括各層次的內容。因此,如果我在主題下有深層次的子目錄5,我仍然需要說明這一點。

這是@ Yarin的評論在這裏:https://stackoverflow.com/a/5250314/1696153

這些都是有用的主題:

我也試過

* 
*/* 
**/** 
那10

**/wp-content/themes/**

/wp-content/themes/**/*

沒有工作對我來說,無論是。很多線索和錯誤!

+3

感謝分享。這是我需要讓我們的團隊離開git的例子。 – raindog308 2017-12-15 18:07:58

2

通用辦法忽略所有子文件夾,同時繼續跟蹤是在/bin目錄中的文件將是下面的行添加到您的項目的.gitignore文件:

bin/*/* 

如果你想忽略只能使用特定的子文件夾:

bin/Debug/* 
bin/Release/* 

nb。如果bin目錄不在您的項目的根目錄中(與.gitignore文件一起),則不是例如。 bin/*/*您可能需要path/to/bin/*/*

14

除了把正確的條目在你的.gitignore文件,如果你想忽略已經加入到回購的東西,你必須做git rm -r /path/to/dir和承諾,你添加目錄到你的面前。 gitignore文件。否則,git將忽略的僅僅是您的忽略指令。

2

不理你可以簡單地使用所有子目錄:

**/ 

這個工作過程中的git的1.8.2版本。