2010-10-21 49 views
16

我已經開始在SVN存儲庫中工作。我已經將它的一個子文件夾克隆到當地的Hg回購中,並且有hg clone將Hg變更提交回SVN

之後,我想與一位無權訪問SVN存儲庫的同事分享。我創建了一個專用的BitBucket存儲庫,我們偶爾會推動這些更改,因此我必須將其撤回。

hgsubversion做一些討厭的東西的變更,如改變他們的提交者(我相信即使散列)。當我嘗試推動並拉動BitBucket回購時,我不得不做一次合併。

現在我無法更改推回版本庫,由於我們親愛的朋友,abort: Sorry, can't find svn parent of a merge revision.

如何在保持兼容hgsubversion(即不導入合併版本)的情況下,將帶有svn-target的Mercurial存儲庫的BitBucket目標Mercurial存儲庫拉出來?

一些自動化的方式來做到這一點,將不勝感激,當然,但如果沒有這樣的事/簡單的方法來做到這一點,我想是任何解決方案表示感謝。

我用hgsubversion,不hgsvn;也就是其中一個的延伸hg clone svn://repo/url。如果有必要,我願意轉換。

+1

目前還不清楚您是否使用hgsvn或hgsubversion(不同的工具)。 – tonfa 2010-10-21 23:13:22

+0

抱歉不清楚!我使用hgsubversion(擴展名)。更新的問題。 – 2010-10-23 08:43:56

回答

21

當您在Subversion版本庫使用水銀,你還以爲像SVN那樣,所以很多基本的工作流程善變的功能部分是行不通的。合併mercurial的方式在svn倉庫中是不可能的。如果你已經合併了你的工作與拉SVN分支,你會得到了臭名昭著的有關消息,你現在越來越:(

我建議你閱讀durin42的回答this question

編輯:要退出你目前的混亂,我建議你從SVN倉庫檢出點創建一個補丁(或一系列補丁),從Subversion倉庫獲取新的副本並應用補丁(我)您可以從您當前的回購庫中完成它,您可以瀏覽hg diff命令。

hg diff -g -r tip -r XXX > patch 

以XXX爲原始SVN結帳(我還沒有測試過。)

+0

-1。我試圖找到一種方法將hg存儲庫轉換爲hgsubversion存儲庫,然後將其與僅使用hg的操作相混淆。 「你不能這樣做,不應該這樣做」 - 我可以自己想出來,但是我仍然想要將這些變化導入到Subversion回購中,無論發生什麼變化,都可以平滑歷史。 – 2010-10-24 20:17:57

+0

瞭解爲什麼它不起作用是尋找解決方案的第一步。我更新了我的答案,希望這會有所幫助。我沒有安裝mercurial的電腦,所以我沒有測試過。但這是我會嘗試的方式。 – 2010-10-24 20:52:02

+0

我會寫一個腳本來取出增量差異,但也會保留日誌消息。 -1 => +1,並接受。謝謝! – 2010-10-25 11:39:01

10

是的,hgsubversion的確改變了提交者的名字,因爲它必須反映Subversion指定的名字。 Hgsubversion 必須然後還改變變更散列。它並不是真正的hgsubversion可以決定的東西 - 它是Mercurial設計的基礎,變更集散列基於變更集中的所有信息,幷包含提交者的名稱。

請閱讀我的hgsubversion guide瞭解如何正確使用hgsubversion。需要記住的重要一點是hgsubversion會將hg變成更好的svn,但它仍然是Subversion。這意味着您必須在將其歷史推回到Subversion之前對其歷史進行線性化,以避免合併或其他有趣的DVCS事件。

如果您確實想要利用Mercurial中的分佈式功能,那麼可以通過小型迭代來實現:在Mercurial中進行一些協作,線性化變更集並推回到Subversion,銷燬克隆中的非線性部分,從Subversion拉。然後,您可以在Mercurial中重複一次新的協作迭代。

+0

謝謝!投票;正如另一條評論所述,我將編寫一個腳本來手動線性化歷史記錄,只保留變更集內容和日誌消息。 – 2010-10-25 11:40:08

0

我只是打了一個類似的問題,這基本上是:

  • 克隆SVN回購與HgSubversion
  • 一些合併
  • 試圖把它拉回到前SVN回購
  • 工作吧

並遇到可怕的Sorry, can't find svn parent of a merge revision消息。

這就是我所做的修復它沒有太多的麻煩:

  1. 下載的TortoiseSVN從this link並安裝它。
  2. 使用上下文Windows資源管理器菜單中的SVN Checkout...命令(右鍵單擊以訪問它)檢出SVN回購到新文件夾。
  3. 將本地HG文件夾的內容(僅限.hg子文件夾)複製到新創建的SVN文件夾中,覆蓋所有文件。
  4. 右鍵單擊該文件夾並執行SVN Commit...
  5. 垃圾你的HG回購,並從現在更新的SVN回購拉回來。

需要2分鐘,所有事情都應該重新開始。你會失去一些合併&提交信息,但它不應該是一個問題,因爲SVN/HgSubversion組合無法跟蹤它們。