从svn合并到git,逐个提交

从svn合并到git,逐个提交,git,svn,version-control,git-svn,Git,Svn,Version Control,Git Svn,我们公司有两个存储库,用于开发一个产品的svn存储库(trunk)和用于部署多个产品(团队)的git存储库(master)。我们的团队希望从svn子目录“trunk/web”合并到git子目录“master/product-a/web-dev” 这些存储库有不同的源代码和不同的树结构,但是我们想要合并的两个子目录中有几乎相同的源代码。而且,它们没有任何链接,我们现在需要手动合并。Git存储库由其他团队共享,我们不能从头开始构建它(不能进行可能会停止日常开发和部署的重大更改) 是否可以在指定的修订

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

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

是否可以在指定的修订范围内(通过几个命令或一个长程序)自动从svn子目录合并到git子目录,逐个提交?我们需要合并commit-by-commit和commit注释,这样我们就可以通过在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 develope)

然后要应用提交:

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

…这将在主干上应用最后10次提交,并将它们提交到开发中。

是的,这可以使用
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 develope)

然后要应用提交:

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

…这将在trunk上应用最后10次提交,并将其提交到Development。

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

  • 通过SVN为Git创建差异修补程序

    svn diff --git -r 12345 > /tmp/12345-fileName.txt
    
  • 修改修补程序文本文件中的路径以解决SVN和Git之间的路径差异
  • 在本地Git存储库上应用修补程序

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

    git commit
    
  • 我运行了一个Java程序来生成和执行这些命令,并一个版本一个版本地重复上述步骤,以合并从SVN到Git的特定版本范围


    我知道这不是一个好的做法,但我必须在版本控制系统没有大的变化的情况下解决当前的问题。谢谢大家的建议。

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

  • 通过SVN为Git创建差异修补程序

    svn diff --git -r 12345 > /tmp/12345-fileName.txt
    
  • 修改修补程序文本文件中的路径以解决SVN和Git之间的路径差异
  • 在本地Git存储库上应用修补程序

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

    git commit
    
  • 我运行了一个Java程序来生成和执行这些命令,并一个版本一个版本地重复上述步骤,以合并从SVN到Git的特定版本范围


    我知道这不是一个好的做法,但我必须在版本控制系统没有大的变化的情况下解决当前的问题。谢谢大家的建议。

    听起来你需要看看git svn,这样你就可以让git与svn保持“同步”。它非常灵活,允许您设置要跟踪的内容。。。。但是它通常非常慢,因为必须一个版本一个版本地修改“a la svn”。为什么不简单地使用其中一个版本来完成所有工作?和Git一样,为什么不在Git中做所有事情呢?我们有两个存储库的原因是,我们的Git存储库(大于5GB)包括多个团队开发的多个产品,并且针对部署进行了优化,因此它需要多个修改才能在本地tomcat服务器上运行一个产品。svn存储库是为开发而修改的,我们使用它来开发每个团队的产品。听起来您需要了解git svn,以便使git与svn保持“同步”。它非常灵活,允许您设置要跟踪的内容。。。。但是它通常非常慢,因为必须一个版本一个版本地修改“a la svn”。为什么不简单地使用其中一个版本来完成所有工作?和Git一样,为什么不在Git中做所有事情呢?我们有两个存储库的原因是,我们的Git存储库(大于5GB)包括多个团队开发的多个产品,并且针对部署进行了优化,因此它需要多个修改才能在本地tomcat服务器上运行一个产品。svn存储库是为开发而修改的,我们使用它来开发每个团队的产品。感谢您的建议。是否可以从svn子目录“trunk/web”合并到git子目录“master/product-a/web-dev”?我们的svn存储库只针对一个产品,但git存储库包含多个产品。是的。我不太清楚细节,但它看起来是这样的:
    git格式补丁trunk/web/&&git am-3--directory=master/product-a/web dev/
    。有关信息,请参阅
    mangit格式补丁
    mangit am
    。谢谢,我选择了这个解决方案。为了加速非常慢的git svn克隆,我只恢复了最后的版本:git svn clone-r12345:HEADsvn://...Thank 谢谢你的建议。是否可以从svn子目录“trunk/web”合并到git子目录“master/product-a/web-dev”?我们的svn存储库只针对一个产品,但git存储库包含多个产品。是的。我不太清楚细节,但它看起来是这样的:
    git格式补丁trunk/web/&&git am-3--directory=master/product-a/web dev/
    。有关信息,请参阅
    mangit格式补丁
    mangit am
    。谢谢,我选择了这个解决方案。为了加速非常慢的git svn克隆,我只恢复了最后的版本:git svn clone-r12345:HEADsvn://...