[英]Case-insensitive filename handling in Mercurial
我在Vista64上使用TortoiseHg 0.5(包括Mercurial 1.0.2)。 我對Mercurial Book的理解是,Mercurial應該在不區分大小寫的文件系統上以不區分大小寫的方式處理文件名(例如NTFS,這就是我所使用的)。 但是我發現我的Mercurial安裝實際上對案例很敏感:
>hg status -A foo
C foo
>hg status -A FOO
? FOO
這可能是Mercurial中的一個錯誤,這是Mercurial的TortoiseHg構建中的一個錯誤,還是別的什么? 如何從Windows上的Mercurial實現不區分大小寫的文件名處理?
此問題已在Mercurial 1.1中得到解決! 從發行說明 :“在案例折疊文件系統面前提高了正確性”。
在Windows上,Mercurial現在忽略其命令行參數中的大小寫:
>hg status -A foo
C foo
>hg status -A FOO
C foo
而且它也知道只涉及大小寫的文件名更改不是新文件:
>ren foo FOO
>hg status -A fOO
C foo
因此,不再存在由於命令行上的錯誤而忽略更改的風險。
但是,請注意.hgignore文件的內容仍區分大小寫。 只有在使用glob語法時才會出現問題。 使用regexp語法,您可以將(?i)放在模式的開頭,使它們不敏感。
我覺得你誤讀了hgbook。 第7.7節的介紹只是描述操作系統中存在的三種不同類型的區分大小寫,而不是說mercurial將反映這些語義。
后來在第7.7.2節“檢測案件沖突”中,它說:
在工作目錄中操作時,Mercurial遵循工作目錄所在的文件系統的命名策略。 如果文件系統保留大小寫但不敏感,Mercurial會將僅在大小寫不同的名稱視為相同。
當你做hg status -A FOO
,mercurial中發生的過程是:
為了更好地看到mercurial不關心NTFS上的案例,請嘗試以下步驟:
你應該看到hg說沒有任何改變,因為唯一改變的是hg忽略你的情況。
當我在linux上做同樣的事情時,我會看到:
! Foo
? FOO
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.