2011-11-16 112 views
17

我有兩個文件,我希望忽略:爲什麼gitignore在這種情況下工作?

  • .idea/workspace.xml
  • someapp/src目錄/ .idea/workspace.xml

我覺得增加這個單一規則。 gitignore就足夠了:

.idea/workspace.xml 

但它僅捕獲頂層.idea/workspace.xml(GIT狀態顯示someapp/SRC/.idea/workspace.xml作爲未跟蹤)。

我也試過**/.idea/workspace.xml,但這根本不起作用。幫幫我?

+0

試試還忽略'someapp/src/.idea/workspace.xml'? – Shahbaz

+0

也許* workspace.xml會做? – chelmertz

+0

@Shahbaz - 可以工作,但我不明白爲什麼.idea/workspace.xml不能。 – ripper234

回答

11
  • [...]
  • 如果圖案不包含斜線/,GIT中把它當作一個殼glob模式並檢查以防止相對於的.gitignore文件的位置的路徑名的匹配(相對於工作樹的頂層,如果不是.gitignore文件的話)。
  • 否則,git會將該模式視爲適合fnmatch(3)使用FNM_PATHNAME標誌使用的shell glob:模式中的通配符不會與路徑名中的/匹配。 [...]

只要路徑包含斜槓,Git會不再檢查路徑匹配,而是會直接使用水珠行爲。因此,您不能匹配.idea/workspace.xml,但只能匹配workspace.xml

Git manual: gitignore

+0

您的結論與手冊中的內容相反嗎? – manojlds

+0

@manojlds我希望不是......:/如果模式不包含斜線,它將匹配路徑名,但如果它包含斜線,它將不再執行此操作,並且將直接調整。 – poke

+0

是的倒退。沒有斜槓= glob匹配。斜槓=沒有匹配。 glob意味着「*可以匹配斜線」 –

0

按照gitignore手冊頁:

模式在同一目錄路徑從的.gitignore文件中讀取,或以任何父目錄,在更高級別的文件模式(高達工作樹頂層)被低層文件中的文件覆蓋到包含文件的目錄。 這些模式相對於.gitignore文件的位置相匹配。項目通常在其存儲庫中包含這樣的.gitignore文件,其中包含作爲項目構建一部分生成的文件的模式。

(重點煤礦)

5

見gitignore手冊中的例子:

「文檔/ * HTML」 匹配 「文檔/ git.html」,而不是 「文檔/ PPC/ppc.html」或「工具/ PERF /文檔/ perf.html」

所以.idea/workspace.xml將匹配根之一,但不someapp/src/.idea/workspace.xml

但是根據你的fnmatch實現,這是你需要的。gitignore:

.idea/workspace.xml 
**/.idea/workspace.xml 
+1

這實際上對我不起作用。 – ripper234

+0

@ ripper234 - 就像我說的,取決於fnmatch的實現。適用於我。 – manojlds

+2

我在Windows上,也許這是差異的原因。 – ripper234

2

試試這個

/**/.idea/workspace.xml

20

這有changed in git 1.8.4

應用平臺的fnmatch(3)功能(很多地方像pathspec匹配的.gitignore和.gitattributes)已被wildmatch替換,允許「foo/**/bar」匹配「foo/bar」,「foo/a/bar」等。

**/.idea/workspace.xml現在應該在這個例子中工作。

相關問題