3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以嘗試類似的組合:
*
!/**/
!*.*
該gitignore排除規(guī)則(否定的模式)應(yīng)忽略所有文件(帶有擴(kuò)展名的文件除外)。
如前所述下面通過瘋狂的物理學(xué)家,規(guī)則是:
如果排除該文件的父目錄,則無法重新包含該文件。(*)
(*:除非git 2.中滿足某些條件?? +,請(qǐng)參見下文)
這就是為什么!/**/要對(duì)文件進(jìn)行白名單很重要(將父文件夾遞歸地白名單)的原因。
我在類似的情況下提到了相同的規(guī)則:
Gitignore忽略除一個(gè)文件夾及其所有內(nèi)容以外的所有內(nèi)容-無論嵌套級(jí)別如何
除了子目錄及其被忽略目錄的文件外的Git
Gitignore排除所有子目錄中的某些文件
正如JakubNar?bski 所說,您可能不想忽略所有無擴(kuò)展名的文件。
我的建議:
首先添加重要的無擴(kuò)展名文件
然后.gitignore如上所示編輯您的文件:已經(jīng)版本化的文件將不會(huì)被忽略(即使它們沒有擴(kuò)展名)。所有其他的將被忽略。
對(duì)于將來要版本的任何無擴(kuò)展名文件:
git add -f -- myFile
請(qǐng)注意,在git 2.9.x / 2.10(2016年中?)下,如果重新包含的路徑中沒有通配符,則如果排除了該文件的父目錄,則可以重新包含該文件。
Nguy?nTháiNg?cDuy(pclouds)試圖添加此功能:
提交 git v2.7.0的506d8f1,已在提交76b620d git v2.8.0-rc0中恢復(fù)
在5cee3493 git 2.8.0-rc4中還原(!)5e57f9c git v2.8.0-rc0,... reverted(!)
但是,由于重新包含的規(guī)則之一是:
重新包含規(guī)則中的目錄部分必須為原義(即沒有通配符)
無論如何,這在這里是行不通的。

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
*
!*/
!*.*
* 告訴git忽略一切。
!*/然后忽略任何目錄。這很關(guān)鍵。
!*.* 取消所有帶有擴(kuò)展名的文件。
如果沒有該!*/規(guī)則,則.不會(huì)列出名稱中不帶a的目錄,并且不會(huì)在根文件夾之外添加任何所需文件。
作為參考,請(qǐng)閱讀.gitignore文檔中的這兩個(gè)部分:
可選的前綴“!” 否定了模式;先前模式排除的所有匹配文件將再次包含在內(nèi)。如果排除該文件的父目錄,則無法重新包含該文件。由于性能原因,Git不會(huì)列出被排除的目錄,因此包含在文件上的任何模式(無論它們在何處定義)都無效。在第一個(gè)“!”前面加上反斜杠(“ \”)。以文字“!”開頭的模式,例如“!important!.txt”。
如果該模式以斜杠結(jié)尾,則出于以下描述的目的將其刪除,但它只會(huì)找到與目錄匹配的內(nèi)容。換句話說,foo /將匹配目錄foo及其下的路徑,但不匹配常規(guī)文件或符號(hào)鏈接foo(這與pathspec通常在Git中的工作方式一致)。

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超5個(gè)贊
在我的文件夾中,有很多帶有*.c, *.h, *.txt, *.csv擴(kuò)展名的文件和沒有任何擴(kuò)展名的二進(jìn)制文件。因此,我需要忽略所有文件execpt *.c,*.h和.gitignore,因此對(duì)我來說,這對(duì).gitignore示例有效:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
- 3 回答
- 0 關(guān)注
- 1096 瀏覽
添加回答
舉報(bào)