簡體   English   中英

git-svn:如何將git提交從一個SVN分支復制到另一個SVN分支?

[英]git-svn: how to copy git commits from one SVN branch to another?

我有一個git-svn簽出我的整個倉庫(在標准的git svn init -t tags -b branches -T trunk $repo_url fashion中git svn init -t tags -b branches -T trunk $repo_url ,然后git svn fetch ed)。 我手動svn copy $repo_url/branches/branch1 $repo_url/branches/branch2 然后我跑git svn fetchgit checkout -b local-branch2 branch2 ,做了幾次提交到branch2dcommit編他們回到SVN回購協議,並正在與我的工作做完branch2 (為什么要分支一個分支?我想在git本地破解這個分支,但是在我工作的時候仍然會回到SVN並從幾個同事那里得到幫助)。

我沒有做的是將branch2工作合並回branch1 如果我git checkout -b local-branch1 branch1 ,然后git merge branch2 ,它只是將我的local-branch1指針快速轉發到branch2所在的位置。

相反,我希望git重放自從branch2啟動到branch1之后所做的所有提交,這樣我就可以將它們中的每一個都提交給SVN repo。 似乎有辦法做到這一點,但我想不到它。 也許git rebase ,或者在branch2做出的每個提交的git cherry-pick (雖然后者有點乏味)。 我寧願不將這兩個URL合並在一起,因為這是一個很大的傷害。

想法? 這需要更多解釋嗎?

branch2上第一次不在local-branch1上的提交可能是創建branch2的提交,是嗎? 這應該在git中顯示為空提交(例如,消息,但沒有內容)。 復制其sha1標識符。 然后在local-branch1中,嘗試git reset --hard branch2 && git rebase --onto local-branch1@{1} SHA1 (其中SHA1是復制的sha1)。 這應該重播所有提交,除了空的一個返回到分支1.你很可能現在想要做一個交互式rebase並編輯每個提交,這樣你就可以去掉git-svn-id:git-svn為你添加的行(或者你可以編寫一個git-filter-branch腳本來執行此操作,如果有足夠的提交)。

出於好奇,你為什么要重播每個提交? 如果你想簡單地合並你的更改,那就更簡單了,你可以只做git checkout local-branch1 && git merge --squash branch2 && git commit 這將執行非快進合並,但它實際上不會產生合並提交(因為那些混淆了git-svn)。 相反,它會產生等效的工作樹,就好像合並已經發生,但只有一個父。 這反映了svn合並的工作方式。

暫無
暫無

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

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