2008-10-26 45 views
5

我在Vista64上使用TortoiseHg 0.5(包括Mercurial 1.0.2)。我對Mercurial Book的理解是,Mercurial應該在不區分大小寫的文件系統(例如NTFS,這就是我)上以不區分大小寫的方式處理文件名。但是我發現我的水銀的安裝,實際上是大小寫敏感的:Mercurial中不區分大小寫的文件名處理

>hg status -A foo 
C foo 
>hg status -A FOO 
? FOO 

難道這是在水銀的錯誤,在水銀的TortoiseHg構建一個錯誤,或者是別的東西?我如何從Windows上的Mercurial實現不區分大小寫的文件名處理?

回答

10

這個問題在水銀1.1已經解決了!來自release notes:「提高了casefolding文件系統的正確性」。

在Windows中,水銀現在忽略的情況下在其命令行參數:

>hg status -A foo 
C foo 
>hg status -A FOO 
C foo 

而且它也知道,文件名更改只涉及案件沒有新的文件:

>ren foo FOO 
>hg status -A fOO 
C foo 

因此有不再有任何因命令行上的錯誤類型而導致忽略更改的風險。

但是,請注意.hgignore文件的內容仍然區分大小寫。僅當您使用glob語法時纔會出現此問題;使用正則表達式語法,您可以將(?i)置於模式的開始處,使其不敏感。

7

我想你誤讀了hgbook。 7.7節的介紹只是描述了OS中存在的三種不同類型的區分大小寫,並不是說mercurial將反映這些語義。

在第7.7.2節「檢測的情況下的衝突」後來它說:

在作業 目錄操作,水銀榮譽,其中 工作目錄所在的文件系統的 命名策略。如果 文件系統是保存大小寫,但是 不敏感,那麼Mercurial會將 的名稱作爲 相同的名稱。

當你做hg status -A FOO這是發生善變內的過程是:

  1. 檢查文件是否存在相匹配的文件參數的文件系統,「富」上 - 在這一點上它是不區分大小寫,所以它發現'foo'並且說「yup,我有一個文件」
  2. 檢查文件清單中是否有與文件參數'FOO'匹配的條目,並且沒有,所以狀態顯示一個 '?'說這是汞不會跟蹤

爲了更好地看到水銀不關心案件在NTFS磁盤上的文件請嘗試以下步驟:

  1. 汞的init
  2. 回聲線>富
  3. 汞添加富
  4. 汞柱提交-m '致力於富'
  5. 移動富未富
  6. 舉動未FOO FOO
  7. 汞柱狀態

,你應該看到汞柱說,一切都沒有改變,因爲改變的僅僅是其中的汞被忽視了你的情況。

當我在Linux同樣的事情,我反而看到:

! Foo 
? FOO