要求在命令git ls-files --ignored
中使用排除模式的邏輯是什麼?爲什麼git ls-files --ignore需要排除模式?
從git help ls-files
:在輸出
-i, --ignored
只顯示忽略的文件。在索引中顯示文件時,只打印排除模式匹配的文件。顯示「其他」文件時,只顯示與排除模式匹配的文件。
要求在命令git ls-files --ignored
中使用排除模式的邏輯是什麼?爲什麼git ls-files --ignore需要排除模式?
從git help ls-files
:在輸出
-i, --ignored
只顯示忽略的文件。在索引中顯示文件時,只打印排除模式匹配的文件。顯示「其他」文件時,只顯示與排除模式匹配的文件。
首先讓我確保你不會混淆--ignored
和。
是您列出未跟蹤文件的選項。從git-ls-files
(重點煤礦)的手冊:
-o, --others
顯示其他(即未跟蹤)文件輸出
這就是說,讓我們看看--ignored
一樣。無論您列出的是什麼,無論是跟蹤文件,未跟蹤文件,已修改文件等,您都可以從輸出中排除某些文件。把它想象成在輸出上自動完成的免費grep -v
。例如:
git ls-files --other --exclude=*.o
會列出不匹配*.o
所有未跟蹤文件。排除模式與.gitignore
無關。的確,.gitignore
決定了會輸出什麼,而--exclude
在列表完成後過濾輸出(或者至少這是觀察到的行爲)。
現在--ignored
只是恢復輸出。所以exclude=
的排除內容將被打印出來,而不被排除的內容將被省略。因此,例如:
git ls-files --other --exclude=*.o --ignored
將打印所有未跟蹤文件做比賽*.o
。
不完全一樣,只--exclude
過濾未經跟蹤文件,所以如果你是列出了跟蹤文件,--exclude
不會排除任何事情。但是,--ignored
會列出應該排除的文件。這有點奇怪。
結論:--ignored
基本上會恢復命令行中給出的排除模式。默認情況下,排除模式爲空(您可以看到所有內容),因此--ignored
沒有任何排除模式會導致所有被省略。這是無用的,這就是爲什麼--ignored
需要排除模式才能工作的原因。
由於--exclude-standard
被提及,我也想對此進行擴展。 --exclude-standard
也會在列表中添加被忽略的模式(例如寫入.gitignore
)作爲排除模式。所以想想下面的命令:
git ls-files --ignored --exclude-standard
首先,這個命令列出了所有的跟蹤文件。然後給出--ignored
命令,它將只打印與排除模式匹配的文件。給定--exclude-standard
,將會打印與.gitignore
中的模式匹配的文件。但那些是你保持不跟蹤的文件。如此有效,你什麼都看不到。 將看到的唯一情況是,如果您正在跟蹤在.gitignore
中您也提到過要忽略的文件。
換句話說,如果該命令輸出任何內容,這意味着你已經告訴git忽略某些文件,但是你違反了你自己的規則,並將它們添加到存儲庫。
其他有趣的命令可能是:
git ls-files --other --exclude-standard
顯示您未在指定.gitignore
所有未跟蹤文件。您還會在git status
中看到這些文件。
git ls-files --other --ignored --exclude-standard
顯示您成功設法忽略的所有未跟蹤文件,其中包括.gitignore
。換句話說,(假設前面的查詢是空的,即沒有未經過簽名的未跟蹤文件),它將顯示當前目錄中不屬於存儲庫的所有文件。這對檢查不應該被忽略的文件很有用,並且必須放入存儲庫。
你的意思是需要指定'--exclude-standard'(或類似的)? – 2013-04-10 12:01:06