我们已将大部分代码库从单个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)
我真的想知道是否有更简单的方法来做到这一点,并了解这种情况的最佳实践.
假设您的源代码的目录结构保持不变,我建议您向旧的 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 服务器结构,则樱桃选择合并可以将其应用到移动的文件上。
它已经对我的某些文件有用,但可能存在一些限制。这绝对值得一试。
| 归档时间: |
|
| 查看次数: |
297 次 |
| 最近记录: |