2017-05-11 77 views
0

我们公司有两个仓库,svn仓库(trunk)用于开发一个产品,git仓库(master)用于部署多个产品(团队)。我们的团队希望从svn子目录“trunk/web”合并到git子目录“master/product-a/web-dev”。从svn合并到git,通过提交承诺

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

是否可以通过svn子目录自动合并(通过一些命令或一个长程序)在指定修订版本中自动合并git子目录,通过commit提交?我们需要通过commit提交注释来合并commit,以便我们可以通过svn中使用的redmine问题编号来跟踪git上的更改。

我很感激任何帮助,谢谢。

+0

听起来你需要看看git-svn,这样你才能保持git与svn发生了什么“同步”。在允许你设置你想要跟踪的内容方面非常灵活......但是由于不得不通过版本“a la svn”进行修订,所以通常非常缓慢。 – eftshift0

+0

你为什么不简单地使用其中的一种?像Git一样,为什么不用git做所有事情? –

+0

我们有两个存储库的原因是,我们的git存储库(大于5GB)包含几个团队开发的几个产品,并且针对部署进行了优化,因此需要多个修改以在本地tomcat服务器上运行一个产品。 svn存储库被修改用于开发,我们用它来开发每个团队的产品。 – rhythm

回答

1

我决心在接下来的步骤问题:

  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程序生成和执行这些命令,并且通过修改重复上述步骤,修改,合并来自SVN修订到Git的特定的范围。

我知道这不是一个好的做法,但是我必须在版本控制系统没有大的改变的情况下解决持续存在的问题。谢谢大家的意见。

0

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

git svn clone svn+ssh://[email protected]/trunk 
cd trunk 
git remote add origin [email protected]:example/develop.git 
git fetch origin 

这将建立一个名为git-svn(SVN主干)一个分支一个Git仓库,并另一个名为master分支(GIT发展)。

然后申请提交:

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

...这将适用于干线的最后10个提交,并承诺他们发展。

+0

谢谢你的建议。是否有可能从svn子目录“trunk/web”合并到git子目录“master/product-a/web-dev”?我们的svn仓库仅适用于一种产品,但git仓库包含多种产品。 – rhythm

+0

是的。我不太清楚细节,但它看起来像这样:'git format-patch trunk/web/&& git am -3 --directory = master/product -a/web-dev /'。有关信息,请参阅'man git-format-patch'和'man git-am'。 –