我希望在一個文件夾中只追蹤.cfg
文件,無論它是在根目錄還是子目錄。
我們知道gitignore規則的一種寫法是:
*
!*.txt
這樣代表忽略所有文件,但是不忽略txt文件,但是這樣實操發現,只有根目錄的txt會被追蹤,子目錄的還是會被忽略。
首先要介紹一條git的規則:
- 如果一個文件的父文件夾已經被忽略,那么這個文件無法被重新包含
這句話的英文是
It is not possible to re-include a file if a parent directory of that file is excluded.
我的例子是在一個文件夾中有多層子文件夾,子文件夾中可能會有.cfg
文件,我要追蹤所有.cfg
文件,排除剩下的所有文件。
# 忽略所有文件
*
# 但是不要忽略文件夾和子文件夾
!/**/
# 不要忽略所有cfg文件
!*.cfg
這樣,在包含所有cfg文件之前,先恢復所有子目錄,這樣子目錄下的cfg文件就可以恢復。