簡體   English   中英

提交Hg更改回SVN

[英]Submitting Hg changes back to SVN

我已經開始在SVN存儲庫中工作了。 我已將其子文件夾克隆到帶有hg clone的本地Hg repo中。

之后,我想與一位無權訪問SVN存儲庫的同事分享。 我已經創建了一個私有BitBucket存儲庫,我們偶爾會推動這些更改,因此我不得不將它們拉出來。

hgsubversion為變更集做了一些討厭的事情,比如改變他們的提交者(我甚至相信哈希)。 當我嘗試推送到BitBucket倉庫時,我不得不進行合並。

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

如何使用svn-targeteding Mercurial存儲庫拉出BitBucket目標Mercurial存儲庫,同時保持與hgsubversion兼容(即,不導入合並修訂版)?

當然,一些自動化的方法可以理解,但如果沒有這樣的事情/簡單的方法,我會感激任何解決方案。

我使用hgsubversion ,而不是hgsvn ; 也就是說, hg clone svn://repo/url的擴展名。 不過,如果有必要,我願意轉換。

當你在subversion存儲庫上使用Mercurial時,你仍然必須像SVN一樣思考,因此基本的mercurial工作流的許多功能部分都無法工作。 合並mercurial的方式在svn倉庫中是不可能的。 如果你已經將你的工作與拉動的svn分支合並,那么你將獲得臭名昭着的關於你現在得到的消息:(

我建議你閱讀durin42對這個問題的回答。

編輯:為了擺脫目前的混亂局面,我建議你從SVN倉庫結賬時創建一個補丁(或一系列補丁)。 從subversion存儲庫獲取新的新副本並應用補丁。 我不確定你是否可以從你目前的回購中做到這一點。 你可以探索hg diff命令。

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

XXX是你原來的SVN結賬(我還沒有測試過。)

是的,hgsubversion確實會更改提交者名稱,因為它必須反映Subversion指定的名稱。 然后,Hgsubversion還必須更改變更集散列。 它不是hgsubversion可以決定的東西 - 它在Mercurial的設計中內置,變更集散列基於變更集中的所有信息,包括提交者的名稱。

請閱讀我的hgsubversion指南 ,了解有關如何正確使用hgsubversion的信息。 需要記住的重點是hgsubversion將hg轉換為更好的svn ,但它仍然是Subversion的主人。 這意味着您必須線性化您的歷史記錄,然后再將其推回到Subversion,這樣才能進行合並或其他有趣的DVCS事情。

如果你想利用Mercurial中的分布式功能,那么可以在小迭代中進行:在Mercurial中進行一些協作,線性化變更集並推回Subversion,銷毀克隆的非線性部分,從Subversion中獲取。 然后,您可以在Mercurial中重復進行新的協作迭代。

我剛剛遇到了類似的問題,基本上是:

  • 使用HgSubversion克隆SVN repo
  • 通過一些合並來解決這個問題
  • 試圖把它拉回原SVN回購

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

這就是我在沒有太多麻煩的情況下解決它的問題:

  1. 從此鏈接下載TortoiseSVN並進行安裝。
  2. 使用上下文Windows資源管理器菜單中的SVN Checkout...命令將SVN repo SVN Checkout...出到新文件夾(右鍵單擊以訪問它)。
  3. 將本地HG文件夾的內容(僅限.hg子文件夾)復制到新創建的SVN文件夾,覆蓋所有文件。
  4. 右鍵單擊該文件夾並執行SVN Commit...
  5. 將你的HG倉庫收集起來並從現在更新的SVN倉庫中撤回。

它需要2分鍾,一切都應該重新開始工作。 你會丟失一些合並和提交信息,但它不應該是一個問題,因為SVN / HgSubversion組合無論如何都無法跟蹤它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM