[英]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中重復進行新的協作迭代。
我剛剛遇到了類似的問題,基本上是:
並遇到了可怕的Sorry, can't find svn parent of a merge revision
消息的Sorry, can't find svn parent of a merge revision
。
這就是我在沒有太多麻煩的情況下解決它的問題:
SVN Checkout...
命令將SVN repo SVN Checkout...
出到新文件夾(右鍵單擊以訪問它)。 .hg
子文件夾)復制到新創建的SVN文件夾,覆蓋所有文件。 SVN Commit...
它需要2分鍾,一切都應該重新開始工作。 你會丟失一些合並和提交信息,但它不應該是一個問題,因為SVN / HgSubversion組合無論如何都無法跟蹤它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.