2014-08-28 78 views
8

與git版本1.7.1,我試圖排除除.php文件的所有文件。什麼!* /平均在.gitignore

我找到工作解決方案依賴於命令!*/

# Ignore Everything 
* 

# Except these files 
!.gitignore 
!*/ 
!*.php 

沒有!*/,只會包括根目錄下的文件*.php。什麼是!*/這樣做可以讓這個工作?

+3

''適合不要忽視''一切都在這個目錄下'/',與一結束!削減。也就是不要忽略子目錄。 – Sammitch 2014-08-28 17:30:41

回答

11

看看在documentation of gitignore

可選前綴 「!」否定了這種模式;之前的模式排除的任何匹配文件 將再次包含在內。如果排除了該文件的父目錄 ,則不可能重新包含文件 。 Git沒有列出性能爲 原因的排除目錄,因此,包含文件上的任何模式都不起作用,無論它們是在哪裏定義的,都在 之間。在第一個 「!」前加反斜槓(「\」)。對於以文字「!」開頭的模式,例如, 「!important!.txt」。

+0

此前,我錯過了本段的關鍵部分......「如果排除該文件的父目錄,則不可能重新包含文件。」謝謝! – bitsoflogic 2014-08-28 18:55:53

+0

沒問題:)很高興我幫助 – Bijan 2014-08-28 19:01:34

9

這裏是我的思路:

忽略聲明*會忽略默認的一切,包括根目錄及其所有內容。

所以在這一點上,根目錄中的所有文件和文件夾被忽略。

!*.php命令將重新包括所有的根路徑的*.php文件,但文件夾仍然被忽略(因爲他們沒有在.php完) - 因此,他們沒有從gitignore否定然而。

因此,!*/命令重新包含所有目錄(和後續的子目錄),以便它們可以檢查*.php文件。例如:folder1/否定聲明!*/相匹配,因爲它包含了/末和文件夾名稱中的通配符*

+0

這對我來說完全有意義,除了:'!* /'行不需要在'* .php'行之前出現,所以git可以看到要搜索的目錄爲PHP文件?或者命令在'.gitignore'中沒有任何作用? – 2016-06-14 19:19:30

+0

@JacobFord正確 - 文檔指定以前的模式,並且'.gitignore'文件從頂部到底部讀取(否則,如何確定先前的模式?)文件夾不會被「!*。php」知道如果它在'!* /'之前。這並不是問題的關鍵。你可以像漏斗一樣思考'.gitignore'文件。 – sjagr 2016-06-14 19:40:06

+0

我的壞!看起來你的回答暗示'!*。php'會在'!* /'之前出現,但現在我看到你只是按照這個順序來解釋它。 – 2016-06-14 19:44:51