我们公司有两个仓库,svn repository(trunk)用于开发一个产品,git repository(master)用于部署多个产品(团队)。我们的团队希望从 svn 子目录 "trunk/web" 合并到 git 子目录 "master/product-a/web-dev"。
这些存储库具有不同的源代码和不同的树结构,但是我们要合并的两个子目录内部具有几乎相同的源代码。此外,它们没有以任何方式链接,我们现在需要手动合并。Git 存储库由其他团队共享,我们无法从头开始构建它(无法进行可能会停止日常开发和部署的重大更改)。
是否可以从 svn 子目录合并到 git 子目录,通过提交,在指定的修订范围内自动提交(通过几个命令或一个长程序)?我们需要通过提交将提交与提交注释合并,以便我们可以通过 svn 中使用的 redmine 问题号跟踪 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程序来生成和执行这些命令,并重复上述步骤,逐个修订,将特定范围的修订合并到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 develop) 的分支。
然后应用提交:
git checkout master
git svn fetch
git cherry-pick git-svn...git-svn~10
git push
。这将在 trunk 上应用最后 10 个提交并提交它们进行开发。