2011-08-04 166 views
3

在工作中,我使用svn存儲庫共享7人。hg克隆相當於hg(init→pull)

爲了避免困擾我的錯誤與提交,並打破了建立適用於所有人,以避免svn分支,我有一個在svn目錄我目前工作的一部分創建一個hg庫。

我對汞進行本地提交,因爲我的工作,因爲我有這樣的一個虛擬機上的所有設置,我甚至推着我的hg庫私人集中的位置。

最近我遷移到了Mac OS X lion這打破了我的虛擬機,所以我不得不重新設置它。所以我從我的svn trunk中檢出了項目,現在想在我正在處理的目錄中找回hg更改集。

我有兩個選擇:

  • $ hg clone <remote repo>
  • $ hg init && hg pull <remote repo>

這是等價?

回答

13

唯一的區別是,如果你運行hg init && hg pull <remote>,那麼你還必須:

  1. 運行hg update default檢出一個工作副本
  2. 手動設置默認路徑爲pushpull

hg clone在一個命令中完成了所有這些。

+0

+1擊敗我。 **:)** - Vaibhav可能需要執行'hg update --clean'。 –

+0

謝謝!!!!我一直在尋找如何禁用hg克隆的默認路徑。 –

4

嗯,是的,沒有。

我知道你的問題表明你正在使用遠程存儲庫作爲源,但問題的標題有點寬泛,所以我正在回答更廣泛的問題。

看似明顯的最終結果是一樣的。儘管這兩個倉庫中的文件不是二進制相同的(請注意,我不是在談論跟蹤的文件,我在談論Mercurial用來跟蹤這些文件的「數據庫」),歷史記錄,變更集等都是一樣的。

所以在這方面,是的,這兩個似乎做同樣的事情。

但是,他們以不同的方式做到這一點。

如果你這樣做:

hg clone REMOTE_URL 
hg init && hg pull REMOTE_URL 

再有就是沒有真正的區別。

但是,如果你這樣做:

hg clone LOCAL_PATH 
hg init && hg pull LOCAL_PATH 

(注意,這個克隆/拉從另一個存儲庫已經在你的硬盤上)

再就是可能的差異。如果可能,本地克隆將使用存儲庫的硬鏈接。換句話說,你並沒有爲存儲庫中的所有文件創建一個新的獨立副本,而是爲它們創建了磁盤上的新鏈接,這些鏈接運行得非常快,並且幾乎不需要空間。

然後,當你開始修改歷史,即。提交新的變更集,這些文件將被取消鏈接,並按照需求進行完整複製。

請注意,確切的啓發式文件,它不會做這樣的硬鏈接是我不知道的。您可以在Mercurial wiki,Hardlinked Clones中閱讀有關此功能的更多信息。

拉不會做到這一點。它將從其他存儲庫中讀取並在目標存儲庫中創建/更新新文件。這需要更多時間和更多的磁盤空間。

所以總結:

  • hg clone LOCAL_PATH可以佔用更少的磁盤空間,並運行一大堆比hg init && hg pull LOCAL_PATH
  • 更快如果你克隆/從遠程倉庫拉,沒有真正的差異