从 svn 合并到 git,逐个提交

merge from svn to git, commit by commit

我们公司有两个仓库,svn仓库(trunk)用于开发一个产品,git仓库(master)用于部署多个产品(团队)。我们的团队想从 svn 子目录 "trunk/web" 合并到 git 子目录 "master/product-a/web-dev"。

这些存储库具有不同的源代码和不同的树结构,但是我们要合并的两个子目录中的源代码几乎相同。此外,它们没有以任何方式链接,我们现在需要手动合并。 Git 存储库由其他团队共享,我们无法从头开始构建它(无法进行可能会停止日常开发和部署的重大更改)。

是否可以从 svn 子目录合并到 git 子目录,逐个提交,在指定的修订范围内自动(通过几个命令或一个长程序)?我们需要通过提交注释合并提交,这样我们就可以通过 svn 中使用的 redmine 问题编号跟踪 git 上的更改。

非常感谢任何帮助,谢谢。

是的,可以使用 git svn。设置:

git svn clone svn+ssh://user@svn.example.com/trunk
cd trunk
git remote add origin git@github.com:example/develop.git
git fetch origin

这将建立一个 git 存储库,其中一个分支名为 git-svn (svn trunk),另一个 分支名为 master ( git 发展)。

然后应用提交:

git checkout master
git svn fetch
git cherry-pick git-svn...git-svn~10
git push

...这将应用主干上的最后 10 次提交并将它们提交给开发。

我通过以下步骤解决了这个问题:

  1. 通过 SVN

    为 Git 创建差异补丁
    svn diff --git -r 12345 > /tmp/12345-fileName.txt
    
  2. 修改补丁文本文件中的路径,解决SVN与Git
  3. 的路径差异
  4. 在本地 Git 存储库上应用补丁

    cd /path/to/local/git/repository & git apply /tmp/12345-fileName.txt
    
  5. 提交 Git

    git commit
    

我 运行 一个 Java 程序来生成和执行这些命令,并重复上述步骤,逐个修订,将特定的 运行ge 修订从 SVN 合并到 Git.

我知道这不是一个好的做法,但我必须在不对版本控制系统进行重大更改的情况下解决持续存在的问题。谢谢大家的建议。