我一直在使用Git,並且想將通常的工作流轉換爲Mercurial。特別是,我有興趣轉換我將用於貢獻Git項目的工作流程,以便能夠爲Mercurial項目做出貢獻。將Git工作流轉換爲Mercurial
通常情況下,在GitHub上的一個項目,我會從原來的項目叉子GibHub的項目,然後取這兩個地方,有兩個不同的遠程名稱:
# Clone the initial repository and call the remote repository 'github-origin'
git clone -o github-origin git://github.com/orig_author/project.git
# Add the forked GitHub repo as an additional remote repo ('github-mine')
cd project
git remote add github-mine git://github.com/me/project.git
git fetch github-mine
當我列出了分支機構與git branch -a
,我得到的是這樣的:
* master
remotes/github-mine/some_feature
remotes/github-mine/master
remotes/github-origin/HEAD -> github-origin/master
remotes/github-origin/some_feature
remotes/github-origin/master
我可以使用git checkout -b new_feature
創建自己的地方分支,然後將其推回給我的GitHub存儲庫,從而增加了兩個引用:
* my_feature
remotes/github-mine/my_feature
然後,我可以聯繫原作者討論此功能,提交拉請求等。 所有這個工作流程實際上完全獨立於原作者的工作時間線。這使得討論實驗性功能非常容易,而不會影響主項目的存儲庫。
如果原作者提交了更多更改,我可以跟上git fetch github-orig
並可能合併或重新綁定我的本地更改。作爲一個快速測試(由當前分支假設是my_feature
):
git fetch github-origin
git checkout -b temp
git rebase github-origin/master
這個工作流程的一個根本問題是要能夠知道每個庫的分支位於相比,我自己的分支機構。特別是,重要的是要知道我的分支與具有相同名稱的遠程分支不同(甚至在兩個GitHub存儲庫之間,兩個master
分支不需要是相同的)。使用gitk --all
來看待這一切非常簡單。
我不知道如何在Mercurial項目上做同樣的事情(例如在BitBucket上)。
這是我一直試圖做的,在此基礎上Command Equivalence Table:
hg clone https://bitbucket.org/orig_author/project
# Edit .hg/hgrc and add 'bb-mine=https://bitbucket.org/.../project' to [paths]
# Apparently equivalent to git fetch.
hg pull bb-mine
這似乎是工作,並將其拉的遠程提交(其實,我已經試過這一個儲存庫,我已經推了一個分支)。我可以看到所有使用hg branches
的分支,但沒有跡象表明它們來自哪裏。 hg view
沒有顯示任何東西。更重要的是,我的tip
現在是我提交的最新版本,但我沒有相當於我將擁有的github-origin/master
標籤(無論是在我自己的提交之前,還是在其他作者進行了更多更改之後)。
我希望能夠在將來的任何時候執行hg pull
(相當於git fetch
),以查看本地副本與其他作者所做的新更改之間的差異必然會改變我的本地存儲庫或BitBucket存儲庫中的任何內容(至少在我修復了由於這些更改而導致的潛在衝突之前)。當我使用Git(這是一個SSH服務器,我可以推送所有分支,甚至還沒有發佈的工作正在進行中)時,我也傾向於擁有自己的backup
存儲庫。
我意識到Mercurial的分支方式與Git的方式不太一樣。但是,Mercurial有沒有相應的工作流程,還是隻能改變我的方法?我怎樣才能看到我使用的每個存儲庫在哪裏與他們各自的分支(他們可能有一些共同點)達成一致?
任何你需要使用汞的理由? – 2012-02-05 18:54:32
@AdamDymitruk我想分叉的項目是使用Hg。我研究過使用hg-git bridge,但是這似乎會使工作流程變得更加複雜,特別是如果我必須在BitBucket之類的項目上使用我自己的Hg分支來處理pull請求。 – Bruno 2012-02-05 19:15:48