镜像SVN子目录中的git子目录

伯恩斯

是的,我知道这里已经有大量的版本控制问题,但是所提出的解决方案都不能完全按照我希望他们做的事情来做,而且我无法找到一种方法来一起破解。我一直在找一个星期。

我的设置:

Windows 7计算机(具有cygwin,尽管我尚未针对此问题进行过介绍),远程密码保护的git repo和svn repo。对于新项目,逐渐从使用svn切换到git(之前没有人使用过git),并且需要来回移动代码。

我想要的是:

我和其他几个人应该可以进行工作,gitproject/path/to/sharedcode并自动更新我们的提交svnproject/trunk/path/to/sharedcode这只会影响这两个子目录,其余的回购协议应保持独立。我正在寻找从git到Subversion的单向永久链接。历史需要保存在git中,而不是svn中,因为那里不会进行开发。此外,我们希望此过程是可重复的,因此将来我们可以anothersvnproject/trunk/path/to/sharedcode以相同的方式将其设置为镜像。

可能的解决方案:

  • 该脚本检查gitproject/path/to/sharedcode(运行git diff)中的更改,如果发现任何更改,则将其复制并将其推送到svn存储库中。它可以每天自动运行,也可以由进行了一些更改的开发人员调用。
  • 像^ this ^这样的脚本,我们可以在进行提交时运行git push gitproject master而不是运行,它将更改同时推送到git和svn。

或者,如果其他所有方法都失败,

  • 一个非常清晰,明显的工作流程,当我们在git中工作时,我们所有人都可以轻松地遵循。类似于“首先,使用COMMAND检出gitproject。然后使用COMMAND创建一个名为NAME的新分支。然后进行更改。然后转到LOCATION并运行COMMAND ...”。

我尝试过的

  • SubGit对于我们的目的来说似乎有些矫kill过正,并且我不希望/没有权限对其进行设置,因为它不是开源的。我也想不创建新的仓库。

  • 使用混帐SVN创建一个新的回购gitproject/path/to/sharedcode使用git svn init --trunk=http://svnhost.com/svnproject/trunk/path/to/sharedcode --no-minimize-url这将创建一个我可以从中推送的新本地存储库,这对于批处理脚本可能很有用,但这并不是理想的解决方案。

  • Git2Svn看起来很有前途,但是我找不到关于它的任何文档,所以我不信任它。

  • 我以前用过Svn2Git(用Ruby编写的),它工作得很漂亮,但是我不认为它具有我现在需要的功能。

  • Git-Subversion Bridge看起来与我们想要的自动同步非常相似,但是同样,它很复杂并且涉及到建立一个新的仓库。如果我从团队的其他成员那里得到帮助,我们可能最终会使用它。

  • 我还尝试编写我描述的Windows批处理脚本。它继续是这样的:git pullgitproject的最新版本,运行git diffgitproject/sharedcodesvnproject/sharedcode,管道输出到一个txt文件,使用可怕的,可怕的WindowsIF声明说,如果diff捡到东西除了自述文件,ROBOCOPY /MIR内容gitproject/sharedcodesvnproject/sharedcodeROBOCOPY从正确的自述一个备份svnproject/sharedcodesvn add应有尽有,svn checkout从远程回购,终于svn commit没用

我确定我拥有解决方案的所有内容,但是我缺乏将它们整合在一起的知识和编码技能。我希望stackoverflow可以提供帮助。

懒Bad
  1. 您不能在Git回购中对树的一部分进行操作(简而言之-它是整体对象,与SVN相反)
  2. 由于p.1,您必须拆分Git存储库并转换/path/to/sharedcode为其他特殊存储库。您可以使用子模块子树的方法(时髦的Git,男孩更喜欢今天子树)
  3. 通过专用回购,您可以使用git-svn将新的远程添加到svnproject/trunk/path/to/sharedcode(Git历史记录将被镜像到SVN,但这是最懒惰和最简单的方法)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章