当原始存储库在Git中时,如何从svn进行部署

时间:2009-01-27 13:46:41

标签: git svn

我的团队使用Git开发,充分利用了它的许多功能。我们在使用svn的git方面效率更高。

但是我们当前的客户端希望我们从svn存储库部署代码,这意味着我们需要以某种方式定期将代码从git移动到svn。

目前我们正在维护一个既是svn checkout又有一个git repo(包含.git等)的目录,然后我们就可以了 git pull; svn commit

当然,这个过程有点复杂,因为我们想使用标签来记录发布点,并且在git创建的文件上运行svn add会产生开销。

这样做的最佳方式是什么?

git-svn会帮助解决这个问题吗?除了允许一个开发人员在使用SVN仓库时在本地使用git工具之外,我从未见过它。我不知道它可以与多个分支机构的多个开发人员一起工作....

3 个答案:

答案 0 :(得分:6)

如果一个人被认为是SVN所有代码的集成商,并且您知道没有其他人为SVN回购做出贡献,那么您可以让他使用git-svn来推动更改:

  1. Integrator使用他的master作为svn的跟踪分支(例如git svn clone $ REPO)。 他从未在这个分支上工作
  2. 开发人员正常工作(大概是在主题分支上,有几个主线集成分支)
  3. 当您想要发布时,集成商会将所有开发人员代码提取到他的主分支(不是master,而是integration
  4. Integrator会尽一切努力确保发布良好的发布
  5. Integrator将integration与其master
  6. 合并
  7. Integrator执行git svn dcommit
  8. 如果其他人正在为SVN做出贡献,你仍然可以这样做,但是集成商必须定期从SVN撤出并将这些更改提供给开发人员,以避免合并冲突。

    无论如何,将代码放入SVN没有太多麻烦是主要问题。您可以在没有本地结账的情况下在SVN中进行标记和分支,这样集成商就可以进行标记(不确定git svn是否会向SVN发送标记)

答案 1 :(得分:1)

davetron5000的答案可能基本上就是你想要的。不过,有一个技巧可以设置它。如果您设置了集成器树,使其具有svn存储库的远程数据库和原始git树的远程数据库,我怀疑git不会将它们识别为相关。您可能需要设置一个grafts文件,向git解释他们有共享历史记录。否则合并将始终存在冲突。

这篇文章看起来可能有助于弄清楚如何正确设置using git grafts to restore svn merge history

答案 2 :(得分:0)

  

当前客户端希望我们从svn存储库部署代码......

...您是否可以通过从GIT存储库进行所有开发并运行构建脚本来检查构建到Subversion的快照来满足该要求?

如果是这样,那么这将对依赖于Subversion存储库中的代码的现有构建脚本进行最小的更改。它使用svn客户端访问Git

> svn co https://github.com/restOfProjectURL/tags/BUILD-TAG-JAN-1-2015

> svn co https://github.com/restOfProjectURL/branches/DEV-BRANCH-FIXES

如果您的构建脚本包含此结帐(或类似内容)以创建本地工作目录,然后从那里进行部署,从技术上讲,您正在从Subversion部署,您可以利用Git来完成其他任务。

(这是https://help.github.com/articles/support-for-subversion-clients/)的帮助