[英]How do I convert a set of mercurial repositories into a git repository?
我目前有一組包含源代碼的mercurial存儲庫。 他們使用分支的“分叉存儲庫”方案。 因此,功能“分支”可能如下所示:
master repo A→B→C
———————↘—————
cool_feature repo D→E→F
一旦cool_feature
准備好黃金時間,我們hg pull
它hg pull
入主機,這樣它將如下所示:
master A→B→C→D→E→F
那時, cool_feature
將擁有與master
相同的東西,它可以被丟棄。
盡管D→E→F
在某些時間點位於單獨的存儲庫中,但它們始終位於mercurial中的“默認”分支上。 我們不使用命名分支來管理這些數據。
這在mercurial中效果很好,但是我們計划轉向git並且git做的事情有點不同。 當然,你仍然可以在git中使用fork repos,但是git branch是短暫的,因此可用於短期分支。
我想將其轉換為單個git存儲庫,該存儲庫使用分支來管理仍在庫存中的工作。 在流程方面,我們將基本上使用“git flow”。 拉取請求將在分支之間,一旦工作完成,分支將被刪除。
master branch A→B→C
————————↘—————
cool_feature branch D→E→F
我不能簡單地使用hg的convert
,因為它不了解多個存儲庫。 實際上,整個hg-git生態系統中的每個工具似乎都希望將git分支轉換為hg分支,反之亦然。 (盡管有證據表明各社區在實踐中使用它們的方式非常不同。)
一個想法是將它們拉入單個存儲庫,轉換它,然后讓git對其進行排序。 畢竟,git只需要標記頭部。 這個想法的問題是大多數工具拒絕轉換多頭存儲庫,如果他們這樣做,git會悄悄地丟棄未經標記的頭部。 如果可以事后標記它們,我還沒弄明白。
另一個想法是,在mercurial中,將這些變更集移動到命名分支,並讓存儲庫轉換器完成工作。 這很棘手,因為分支並不總是從一個點開始:
master repo A→B→C→F→G→H
———————↘—————↘————————
nifty_feature repo D→E I→J
\ ↓
+——→K→L→M (K is a merge of E and J)
當兩個開發人員一起開始一個項目的工作時,通常會出現這種情況,但最終不會出現與他們的起點完全相同的變更集。 但是沒有一點可以選擇作為創建分支的“上線”。
另一個可能的情況是第一次修訂是合並時:
master repo A→B———→C
\ \
+→D \
————————\——↘—————————
gnarly_feature repo +—→E→F
這里,分支的“根”是E
, C
和D
之間的合並。 鑒於它是一個合並修訂版,我並不是很清楚你如何將它重新定義到一個新的分支。
由於其他原因,我已經通過reposurgeon運行轉換,所以我可以訪問一些相當奇特的工具來在飛行中修改它。 但是每次轉換需要大約20個小時,所以嘗試一堆沒有成功的東西已經證明是非常昂貴的。
但似乎因為人們確實從hg轉換為git並且這些都是常用的分支方案,所以有人在那里肯定解決了這個問題。 有關使用什么工具或嘗試什么策略的任何想法都是受歡迎的。 如何實現這一目標?
他們總是在mercurial的“默認”分支。 我們不使用命名分支來管理這些數據
這是一個很大的錯誤:您可以同時使用命名分支+單獨的克隆
我想將其轉換為單個git存儲庫,該存儲庫使用分支來管理仍在庫存中的工作
它可能是大誤差2(方向/從Hg到Git /和方法/單回購/)
整個hg-git生態系統中的每個工具似乎都希望將git分支轉換為hg分支,反之亦然。
錯了。 我手里拿着Git-repo,用一組Git-branches克隆了hg-git。 在Mercurial方面,我(如預期)有一個分支
>hg branches
default 5266:1ffe854c93c1
和Git-branches,作為hg書簽呈現(他們真的是)
>hg book
1.6 2344:fc32e948fcba
1.7 5140:1c58e9bfa3d5
2.0 5219:683d072d02b6
feature_dbpluginapi 4986:a855a635e17f
feature_indexCleanup 5207:7ec7ee38ef2f
feature_preview 4806:d40ade50b113
feature_updateAll 4807:97ea12fea917
master 4620:de0053588acf
我不能簡單地使用hg的轉換,因為它不了解多個存儲庫
但是您必須將它用於每個存儲庫轉換:
--branchmap
選項將每個feature-repo轉換為中間Mercurial-repo(將default
分支重命名為另一個... feature-name?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.