使用 git 版本 2.34.0.windows.1
我/.gitignore在我的存盤庫的根目錄下有一個檔案,其中通常會忽略擴展名的嫌疑(這里并不真正相關)。
在樹 ( /a/b/c/.gitignore) 的中間,我有另一個檔案,我想在其中說“遞回地在此目錄下,忽略任何名為 的目錄devl,除了直接位于內部的一個特定檔案擴展名”。所以我提出了以下規則:
devl/**
!devl/*.dat
不幸的是,這似乎不起作用——git 仍然報告檔案/a/b/c/d/devl/test/foo.bar未跟蹤,而不是忽略。(它根本不忽略devl目錄樹中的任何內容。)
我可以通過使用以下規則來解決這個問題,但據我從檔案中可以看出,以上應該是合法的并且也有效:
/**/devl/**
!/**/devl/*.dat
為什么是這樣?這是錯誤還是誤解?
uj5u.com熱心網友回復:
不幸的是,您沒有足夠仔細地閱讀檔案...
如果模式的開頭或中間(或兩者)有一個分隔符,則該模式是相對于特定 .gitignore 檔案本身的目錄級別的。否則模式也可能在低于 .gitignore 級別的任何級別匹配。
你的第一個模式在中間devl/**有一個/,所以它是相對于目錄的/a/b/c/。
因此,/a/b/c/devl/test/foo.bar應排除,而/a/b/c/d/devl/test/foo.bar不應排除。
uj5u.com熱心網友回復:
也許這兩件事會有所幫助:快取和排序。
洗掉所有或特定檔案的快取。
git rm -r --cached .
git rm -r --cached <your_file_name.ext>
改變順序
gitignore 檔案中的每一行都指定了一個模式。在決定是否忽略路徑時,Git 通常會檢查來自多個來源的 gitignore 模式,按照以下優先級順序,從高到低(在一個優先級內,最后匹配的模式決定結果):
這一行很重要:最后匹配的模式決定結果
uj5u.com熱心網友回復:
這有效:
**/dev1/**
!**/dev1/*.dat
這有效而 OP 無效的原因是因為.gitignore規則,因為@lxvs 正確識別了.
uj5u.com熱心網友回復:
在不忽略檔案之前,我會確保不忽略檔案夾。
如果一個檔案夾被忽略,則!myFile該檔案夾內的任何內容都不起作用。
因此,對于您的第二個嵌套.gitignore,請嘗試:
**/devl/
!**/devl/**/ <=== Important
!**/devl/*.dat
話雖如此,這應該在Git for Windows 2.34.1(2021 年 11 月)中進行嘗試,其中包括 2.34.0 的回歸修復
請參閱Derrick Stolee ( ) 的commit 33c5d6c(2021 年 11 月 19 日)。(由Junio C Hamano合并-- --在commit 1bf2673,2021 年 11 月 22 日)derrickstolee
gitster
dir:還原“目錄:正確選擇目錄”報告人:Danial Alihosseini
簽字人:Derrick Stolee
這將恢復提交 f6526728f950cacfd5b5e42bcc65f2c47f3da654。
f652672(“
dir:正確選擇目錄”,2021 年 9 月 24 日,Git v2.34.0-rc0 --合并在第 13 批中列出)的更改導致基于目錄的匹配與非錐模式模式的回歸,尤其是對于 .gitignore 模式。包括一個測驗以防止將來出現這種回歸。在提交ed495847(“
dir:在顯示目錄修復模式匹配”,2021年9月24日,Git的v2.34.0-RC0 -合并上市批號#13)中被恢復5ceb663(“dir:修訂目錄匹配的錯誤”,2021- 11-02, Git v2.34.0-rc1 -- merge ) 出于類似的原因。當這些提交被恢復時,提交更改的測驗和系列中后面添加的測驗繼續通過。
uj5u.com熱心網友回復:
請嘗試以下操作:
**/devl/*
!**/devl/*.dat
它對我有用,并在 .gitignore 中找到了感嘆號的答案不起作用。第一行忽略里面的所有內容 devl,第二行排除.dat檔案。
uj5u.com熱心網友回復:
這似乎是 git 中的一個錯誤;我已經向他們的問題跟蹤器發布了一份報告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/380926.html
