2017-07-31 72 views
0

我想要做的是列出文件夾中的所有gitignore規則。假設以下文件夾結構:GIT:如何列出文件夾中的所有gitignore規則

project/ 
project/folderA/ 

現在,如果我想要一些gitignore規則,我的整個項目,我把它放在project/.gitignore,但我也可以添加一些規則來project/folderA/.gitignore,這是我的理解,將適用至project/folderA及其子文件夾。

現在假設我有兩個.gitignore文件的一些規則,我在project/folderA,我怎麼能列出了適用於這裏所有gitignore規則?我需要查看從父文件夾繼承的所有聯合以及當前文件夾中存在的聯合。

您可以使用下面的命令:

git check-ignore * 

這將直接列出你這是忽略了當前文件夾下的一切,如果你增加一個-v選項,它也將告訴你這已經引起了規則它被忽略。

我需要的不是給出一個例子,看看它是否被忽略,我只需要看到適用於當前文件夾的所有規則。

編輯:一些建議,.gitignore文件中的子文件夾中覆蓋父,只有該文件需要進行檢查。我已經用git版本2.13.3進行了測試,這不是它的工作原理。如果我在父文件夾中有patternA,即使在子文件夾的.gitignore文件中沒有相同的模式,它也會在子文件夾中被忽略。

編輯2:考慮以下工作例如:

[[email protected] tmp]$ mkdir test 
[[email protected] tmp]$ cd test/ 
[[email protected] test]$ git init 
Initialized empty Git repository in /tmp/test/.git/ 
[[email protected] test]$ echo "a">.gitignore 
[[email protected] test]$ mkdir p 
[[email protected] test]$ cd p 
[[email protected] p]$ echo "b">.gitignore 
[[email protected] p]$ echo "c">.gitignore 
[[email protected] p]$ touch a 
[[email protected] p]$ touch b 
[[email protected] p]$ cd .. 
[[email protected] test]$ touch a 
[[email protected] test]$ touch b 
[[email protected] test]$ git add . 
[[email protected] test]$ git status 
On branch master 

Initial commit 

Changes to be committed: 
    (use "git rm --cached <file>..." to unstage) 

    new file: .gitignore 
    new file: b 
    new file: p/.gitignore 

[[email protected] test]$ cd p 
[[email protected] p]$ git list-git-ignore-rules-applied-here <-- hypothetical 

正如你可以看到,在父文件夾的唯一規則是a,並且在p文件夾中的兩個規則是ab,因此在git add .之後跟蹤那些創建的文件。現在的這個例子代碼的最後一行是我需要的,這應該給我的輸出:

a 
b 
c 
+0

你的意思是你想要明確適用於該文件夾的規則,或者*可以*應用於該文件夾,假設你在其中放置了一個匹配文件(即不關心文件夾的規則)? –

+0

你爲什麼需要這個?你想在這裏解決哪個問題? –

+0

我克隆了一個repo,而不是我想添加一個文件夾中的一堆數據。我需要知道在我的'gitignore'規則中是否有任何模式相似'data',我可以使用並命名我的數據文件夾。如果我不需要,我也不想更改任何'.gitignore'文件。 – adrin

回答

0

由於manual狀態:

「,在更高級別的文件模式(最多頂層的工作 樹)被低層文件中的文件覆蓋到包含文件的 目錄。「

所以只有一個.gitignore文件被應用在你的子目錄,所以對於應用的規則,你只需要讀取一個文件。

+0

我知道這就是手冊所說的。但它含糊不清,而且不符合你的建議。 – adrin

+0

如果您將新行添加到子文件夾中的.gitignore中,父文件夾的行仍然應用,因爲git將繼續跟蹤任何已被跟蹤的文件。請參閱:https://stackoverflow.com/questions/1274057/how-to-make-git-forget-about-a-file-that-was-tracked-but-is-now-in-gitignore?rq=1 – Swifting

+0

被git跟蹤的文件與作爲規則應用的行沒有任何關係,即使這是合理的,你的答案仍然是錯誤的。 – adrin

相關問題