在SVN目录中初始化Git存储库后,如何重新设置Git提交给SVN的基础?
当我的SVN服务器关闭时,我在我的SVN存储库中创建了一个Git存储库。在主分支上进行了一些提交之后,我希望将更改重新设置回SVN服务器(这在逻辑上是可能的,因为主分支的初始提交是SVN服务器停止运行时的SVN修订,再加上一些小的更改)。因此,我使用Git SVN将SVN作为一个分支添加到Git中,如So中所述 基本上我现在有两个分支:在SVN目录中初始化Git存储库后,如何重新设置Git提交给SVN的基础?,git,svn,version-control,git-svn,rebase,Git,Svn,Version Control,Git Svn,Rebase,当我的SVN服务器关闭时,我在我的SVN存储库中创建了一个Git存储库。在主分支上进行了一些提交之后,我希望将更改重新设置回SVN服务器(这在逻辑上是可能的,因为主分支的初始提交是SVN服务器停止运行时的SVN修订,再加上一些小的更改)。因此,我使用Git SVN将SVN作为一个分支添加到Git中,如So中所述 基本上我现在有两个分支: git_svn(我的svn服务器崩溃时的svn版本) master(从1开始的分支,包含从1开始的所有更改) 由于它们在Git树中没有连接,Git不知道1+2是
- 在包含master和git_svn分支(补丁)的初始提交的一个目录上创建标准diff
- 将修补程序应用于git_svn分支
- 创建
git格式回补到初始提交
git\u svn的所有补丁git-am
然而,在这里,Git告诉我补丁无法应用 按时间顺序排列的工作流如下所示:
- 使用svn repo的git svn clone url签出svn存储库(svn_repo与包含A-F的svn_分支)
- 准备好git特性分支(包含特性分支F'-K的git_repo)
cd svn_repo
git reset --hard (warning: dont apply if you dont understand the implications)
git clean -rfx (warning: dont apply if you dont understand the implications)
cd ../git_repo
git checkout F'
git reset --hard (warning: dont apply if you dont understand the implications)
git clean -rfx (warning: dont apply if you dont understand the implications)
diff -wru3 svn_repo git_repo | grep -i only
现在删除仅在svn_repo中的所有内容,然后准备创建和应用修补程序:
diff -wrNu3 svn_repo git_repo > svnToGit.patch
cd svn_repo
patch -p1 < ../svnToGit.patch
现在我们在svn_分公司
A --- ... --- F -- F'
在git_repo
F' --- G --- ... --- K
对于重定基址,我们现在将功能分支作为远程添加到svn_repo
git remote add featurebranch path/To/git_repo
git checkout featurebranch
请记住,我们现在在F'有svn_分支,从F'开始有feature分支。这意味着git rebase能够将功能分支的每次提交应用于svn_repos svn_分支。我们可以通过拨打电话:
git rebase -s recursive -Xours -Xignore-space-at-eol --onto svn_branch G K
选择递归合并策略并在eol和ours处传递选项ignore space,这有效地告诉递归策略在发生冲突时始终使用来自feature分支而不是svn_分支的代码
我只有删除文件和新文件的冲突gitmergetool
总是告诉我更改是本地的还是远程的,我决定在整个重基过程中使用远程,这意味着功能分支。发生冲突后,您可以继续使用git-rebase--continue
。当重新基址完成后,您应该检查正确性,查看日志,如果一切正常,您可以使用git svn dcommit
应用最终的svn_分支
git rebase -s recursive -Xours -Xignore-space-at-eol --onto svn_branch G K