2010-11-17 41 views
22

我是Mercurial HG的新手。我的朋友創建了一個回購,我將使用它。 我安裝了TortoiseHG並試圖獲取最新的代碼。我發現使用克隆操作時,它會將所有代碼拉到我的本地,包括歷史記錄(對嗎?)。這不是我需要的。我只想得到最新的代碼。是否有這樣的操作?使用Mercurial HG時,如何獲取最新的代碼?

+0

謝謝你們所有的人!雖然我仍然需要克隆整個回購,但我從每一個回答中都能更多地瞭解Mercurial HG! – DeepNightTwo 2010-11-18 07:33:02

回答

18

總之,沒有。

稍微長一點:Mercurial還不支持「淺」克隆,只有部分歷史記錄。因此,每次克隆時,都會使用所有變更集來引入整個存儲庫。

此外,與Subversion不同,無法制作「窄」克隆,您只需簽出一部分存儲庫。例如,如果存儲庫具有目錄foo/bar/,則無法僅獲取bar/目錄。換句話說,Mercurial總是運行在項目範圍的快照上。

+1

對於Mercurial而言,似乎歷史是一件重要的事情。它將永遠包含整個歷史。 – DeepNightTwo 2010-11-18 07:44:18

+4

我改變了我們通常在Mercurial中使用的答案中的術語:當您僅獲取歷史的一部分時,我們會討論「淺」克隆,當您只獲取部分文件樹時,會討論「狹義」克隆。 – 2010-11-19 15:04:40

+3

人們已經爲淺層克隆製作了原型,但它們尚未成爲主要發行版的一部分。 – 2010-11-19 15:06:29

4

一旦你克隆了一個倉庫,爲了得到「小費」的代碼(當前分支的最後一個版本 - 如果不是精確的話,默認的那個),你只需要update

您在TortoiseHG有更新操作。完成後,您可以查看文件夾中的文件。

如果你想存儲庫(舊版本,或舊標籤的狀態)的另一種狀態,那麼它仍然是update命令,與其他parametters(見文檔或TortoiseHG接口)。

+0

謝謝你告訴我的! – DeepNightTwo 2010-11-18 07:44:38

3

如果你只想要最新的代碼,並且你不打算做與存儲庫相關的任何事情,比如提交,或比較舊的版本,或者其他什麼,那麼這取決於你獲得代碼的位置從和如何。

如果他使用的是其中一種託管服務,比如bitbucket,那麼通常會有一個下載鏈接,它只提供源代碼。

舉例來說,如果你去here,有一個「獲取源」聯繫了起來,並賦予你的文件格式幾個選擇(zip或諸如此類的東西。)

如果你有這些文件的某處權否則,你需要探索你從他們得到的界面。嘗試將您克隆的鏈接粘貼到瀏覽器中,然後查看獲得的內容。

+0

我確實需要進行簽入和添加文件等操作。儘管如此,我仍將Mercurial視爲SVN ...... – DeepNightTwo 2010-11-18 07:43:24

2

當然。克隆存儲庫,然後刪除.hg子目錄。

+0

問題是,它仍然投入大量時間克隆整個回購。看來它必須...... – DeepNightTwo 2010-11-18 07:31:41

+0

其實並不是這樣糟糕的解決方法。 – Marian 2014-09-22 11:17:00

5

最簡單的方式來實現你想要的:

hg archive [destination folder] 
0

要拉只變更集的一個子集,指定一個或多個版本 標識符與-R/- 轉或分支機構,-b/- 科。生成的 克隆將只包含指定的更改集及其祖先。

例如, hg clone -b NeededBranch http://example.com/myRepo

Mercurial manual

+1

問題是如何在不拉動歷史的情況下克隆,拉動祖先在大多數使用情況下仍然會拉動很多歷史。 – 2015-12-23 22:07:25

+0

@YaakovKuperman:這可能是一次拉動歷史,如果從那時起歷史被削減。但是你是對的,在大多數情況下,這不會很大程度上減少歷史的總體規模。這種技術對於處理混亂的合併衝突情況更有用。 – Yitz 2016-01-07 09:12:37

2

我可能是有點晚了,但實際上它是可以忘記一些歷史與水銀。您只需要啓用從您的mercurial.ini文件或。hgrc文件。

[extensions] 
hgext.convert= 

現在,您可以使用convert擴展名來僅克隆從指定修訂版開始的變更集。

hg convert --config convert.hg.startrev=[wheretostart] path_to_full_history_repo path_to_new_repo 

只要注意,這是不是符合HG克隆相同的操作。這就是爲什麼源存儲庫必須是本地存儲庫。例如,如果我們在文件夾中MyProject的一個倉庫,我們要忘記修改100之前完成所有的變化我們可以使用下面的命令:

hg convert --config convert.hg.startrev=[100] MyProject MyShrinkedProject 

如果你要使用這個縮小庫放在「中心服務器「記得要照顧每個人在繼續工作之前克隆它。存儲庫不再相互兼容。

+0

這個答案假定可以一次完成一個完整的克隆,並且從那時起只使用一個部分克隆。如果您確實需要一些歷史記錄,但只回到某個修訂版本,這是一個很好的解決方案。如果你想從頭開始沒有歷史記錄:1.從一個完整的克隆開始。 2.運行hg清單並將結果保存到文件中。 3.刪除.hg文件夾。 4.運行hg init。 5.在保存的文件列表上運行hg add。 – Yitz 2016-01-07 09:10:14

相關問題