2011-09-21 34 views
4

對於Hg的addremove命令,我在尋找合理的- 類似默認。Mercurial:哪個addremove - 建議使用類似的默認值?

哪個值適用於各種文件?

對於哪種編程語言,哪個值適用?

+0

投票結束(對於當前問題的形式):' - 相似性'用於檢測重命名的文件。如果在重命名時不更改相同變更集中的文件,則此效果最佳,然後「100」的默認值工作得很好。只要Mercurial認爲它是文本而不是二進制文件,文件和內容的類型就無關緊要。 –

+0

@Joel ..但是當決定是否顯示差異時,Mercurial只會區分文本和二進制。否則,一切都是二元的。 – mpm

+0

@mpm:我最後一句(內容無關緊要)是關於他最後一個問題(每種語言的價值)。這是我的理解,如果Mercurial認爲該文件不是二進制文件,它只會計算diff。 –

回答

4

沒有一個很好的價值。如果有的話,它已經是默認了。語言和文件類型在很大程度上是不相關的。重要的是文件的大小與您所做更改的大小相關。

如果您只是簡單地移動文件而不進行編輯,那麼100是最好的答案。 Mercurial可能不會做任何錯誤猜測什麼增加和刪除實際上是重命名。

如果您在移動大文件時對小文件進行小編輯,那麼90可能運行良好。除非你有一些非常相似的文件,否則Mercurial可能不會被愚弄。

如果您對小文件進行較大更改,則可能需要下至50來猜測重命名。但是Mercurial弄錯了兩個不同但相似的文件的機率現在非常大。

(爲便於比較,Git使用50%的啓發式默認情況下,比較和合並,但因爲它實際上並沒有記錄在歷史上重命名,有猜錯的永久缺點少。)

+0

從(GUI)客戶端角度來看,我不想要求用戶輸入* every * addremove的百分比值。所以,如果沒有良好的單一默認值,用戶可以在例如「完全相同(我只是移動文件)」,「非常相似(我做了輕的重構)」,「狂野猜測(我重寫了所有內容)」,相當於100?,80 ?, 50? – mstrap

2

你可以找到通過運行Mercurial選項--dry-run可以爲特定情況提供合適的值。 Mercurial不會執行任何操作,但會顯示它會執行的操作。您還會看到每個文件的相似性,因此您可以在執行實際操作之前調整您的值。

例子:

hg addremove --similarity 50 --dry-run 
... 
recording removal of ../contact_form/views.py as rename to contact_form/views.py (98% similar) 
2

注意,bug 3430release note 2012-06-01提的addremove

addremove:雖然沒有文件默認相似行爲-s100

因此,「最好的價值「,-s100(相同,簡單的動作沒有編輯它的)是默認的。