轻松地将旧svn存储库中的错误修复复制到新的git存储库中.

Mar*_*oth 8 svn git interop

我们已将大部分代码库从单个svn存储库移动到一组git存储库中.由于各种原因,一些工作(在现场部署的项目的旧版本)必须在旧svn分支中继续,在它们被移动到gitsubversion并从中删除之后trunk.

我刚刚在一个svn分支上完成了这样的工作,并通过执行以下操作将更改从svn存储库重新应用到git存储库:

cd <common_svn_commit_root>
svn diff -r 12344:12345 > ~/r12345.diff
gedit ~/r12345.diff
cd <common_git_commit_root>
git apply ~/r12345.diff
Run Code Online (Sandbox Code Playgroud)

但是为每个svn提交执行此操作相当麻烦,尤其是gedit步骤,我必须手动将svn路径移植到git路径中(通常通过为顶级目录名添加前缀).

尝试到目前为止提出的一些选项的一个问题是旧svn回购和新git回购的结构是不同的.这是我编辑补丁文件的原因之一.

旧的目录结构是

svn
    configurations
        blah
        mine
        blam
    plugins
        foo
        core
        mine
        bar
Run Code Online (Sandbox Code Playgroud)

而新的结构是

svn
    plugins
        bar
git
    my_git
        my_config
        plugins
            mine
    core_git
        plugins
            core
    foo_git
        plugins
            foo
Run Code Online (Sandbox Code Playgroud)

我真的想知道是否有更简单的方法来做到这一点,并了解这种情况的最佳实践.

Oli*_* B. 1

假设您的源代码的目录结构保持不变,我建议您向旧的 SVN 分支添加一个远程:

$ git config --add svn-remote.svn-branch.url http://my.svn.server/project/branches/my-branch
$ git config --add svn-remote.svn-branch.fetch :refs/remotes/old-svn-branch
Run Code Online (Sandbox Code Playgroud)

这样,您将能够跟踪旧 SVN 分支和本地分支中全新的 Git 服务器上的更改,并使用git-cherry-pick在 Git 服务器分支上应用包含修复的提交。

编辑

Git 跟踪文件的移动。

我自己没有尝试过,但如果您克隆 SVN 存储库,然后在本地移动目录以匹配新的 Git 服务器结构,则樱桃选择合并可以将其应用到移动的文件上。

它已经对我的某些文件有用,但可能存在一些限制。这绝对值得一试。