2015-10-21 69 views
1

我有三個不同的基於Linux的工作位置,每個位置都有一臺不同的計算機。每次我從一個工作場所轉移到另一個工作場所時,我需要有一個同步的存儲庫,以便保持最新版本的編碼。你總是可以提交併推送bitbucket,然後從另一臺計算機上提取,但這不是提交的目的。爲多個工作區同步Mercurial存儲庫的實際版本

其他類似的帖子沒有幫助,如Synchronizing a collection of Mercurial repositories

有什麼建議嗎?

+0

那麼,什麼方式你的問題,從你實際上鍊接的有什麼區別?你眼中的'承諾的目的'是什麼?你有沒有考慮提交鉤子? – planetmaker

+0

您通常會在完成某些工作時提交。根據我目前的議程,我可以完成一個新的代碼行,然後前往其他地方......至於另一個問題,看起來像這些存儲庫不存儲相同的項目,但不同的項目。 – nightcod3r

+0

您可以提交「何時(您需要)|(需要)」分開的永久性WIP分支將會合適 –

回答

2

您在庫之間交換臨時工作的兩個主要選項是Mercurial Queues和evolve extension

Mercurial隊列被相當廣泛地記錄在here。要將它們用於您的目的,您必須將這些修補程序置於版本控制之下(在本章底部附近解釋),然後可以將它們從共享修補程序存儲庫中推送/拉出。請注意,該書已有幾年歷史,Mercurial在此期間添加了一些便利功能。現在您可以直接通過--mq選項(例如,hg init --mq,hg commit --mq,hg push --mq)在修補程序存儲庫上執行操作,並且爲了方便起見,不需要bash別名。

Evolve可能更直觀;它爲共享可變歷史記錄提供了一種相當直接的方法。您可以在一個存儲庫中提交更改,將更改推送到共享存儲庫,從另一個存儲庫中提取並取消提交或更改它們,然後將其推回。

爲了進行設置,您需要一個共享的存儲庫,聲明爲non-publishing。您可以通過添加以下各行其.hg/hgrc做到這一點:

[phases] 
publish = False 

這可以防止通過變更成爲公共的(在這一點,他們會成爲不可變的)這個倉庫進行交換。

您還需要首先安裝擴展(不像MQ,它是Mercurial核心的一部分)。

請注意,Bitbucket目前不支持過時標記,這對於變更集演變的功能至關重要,因此您需要將共享存儲庫託管在不同的位置。 Evolve的作用不是刪除過時的變更集,而是將它們標記爲過時並隱藏它們(過時標記也跟蹤新老變更集的相關性)。由於Bitbucket不支持這些標記,因此如果推送到那裏,廢棄的更改集將再次變爲可見。 (請注意,您仍然可以在本地或進化感知庫之間使用進化,並使用Bitbucket作爲公共內容。)

1

方式略有不同:

  1. 型手動
    • MQ與MQCollab extension
    • 提交使用MuliRepo extension(只拉之前,不要忘記在每一個工作場所hg pull回購之間的 「經典」 交流 - 並將所有遠程回購添加到每個工作場所的[multirepo]部分)
  2. 自動化的方式
+0

當然,喜歡自動化的方式。 bitbucket存儲庫可以編程爲像中央集線器那樣工作嗎? – nightcod3r

+0

@ nightcod3r - 因爲我在中央倉庫看不到要求「運行*任何*」,是的,我認爲*這是可能的 –

相關問題