簡體   English   中英

使用git-svn將svn分支合並回trunk和trunk回到分支

[英]Using git-svn to merge a svn branch back into trunk and trunk back into the branch

所以我正在使用git並與svn repo進行交互。

我有一個svn TRUNK,看起來像這樣:

A-B-C-D

還有一個svn bug_fixes分支,它在提交B或C處分支:

 -c-d-e-f-g-h-i

現在我需要將我的svn分支中的cdefghi提交返回到主分支。

我知道我可以做一個被壓扁的提交,讓我們稱之為壁球SQUASH(它將包含cdefghi),但后來似乎我必須殺死bug_fixes分支並啟動一個新的分支以干凈地繼續。

這里: http//blog.red-bean.com/sussman/?p = 92他們建議:

checkout分行。

merge master的更改merge到分支中。

Checkout主人。

merge --reintegrate將分支的更改merge --reintegrate到主服務器上。

繼續發展。

不幸的是,git-svn似乎沒有認識到svn的任何“merge --reintegrate”命令。

那么我如何干凈地使分支和master擁有所有提交,以便使用git-svn的命令繼續開發兩者?

git-svn文檔的警告部分警告

為了簡單和與功能較弱的系統(SVN)互操作,建議所有git svn用戶直接從SVN服務器clonefetchdcommit ,並避免git clone之間的所有git clone / pull / merge / push操作存儲庫和分支機構。

作者提供了一個建議:

在git分支和用戶之間交換代碼的推薦方法是git format-patchgit am ,或者只是dcommit到SVN存儲庫。

適應您的情況

git format-patch --stdout c^..i >my.patch
git reset --hard trunk
git am <my.patch

其中ci是歷史記錄中提交的適當標識符。

好的,我發現了一些方法:

git checkout your_branch
git rebase master
git checkout master
git merge your_branch

要么

git checkout your_branch
git rebase master
git checkout master
git merge --squash your_branch

要么

git checkout your_branch
git rebase master
git checkout master
git rebase -i your_branch

畢竟那之后。

git svn dcommit (to commit to master)
git branch -D your_branch

然后(從svn因為git-svn不支持刪除)刪除分支,然后從trunk重新創建它並重新開始循環。

如果您不使用合並 ,您還可以選擇櫻桃

兩個語句都應該在沒有更改的分支上完成。

如果c比我年長,並且您想要采用整個序列。

git cherry-pick c..i

或單獨提交

git cherry-pick c d e f g h i

將你的本地東西( <branchpoint>..i )重新定位到從SVN獲取的新主設備上,這不是一個好的案例嗎?

如果您提交合並,它會自動將其壓縮為1次提交。 遺憾的是它沒有在內部使用svn:mergeinfo或--reintegrate,因此你失去了與通過'git svn branch'創建的分支的關聯。

暫無
暫無

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

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