是的,我知道这里已经有很多版本控制问题了,但是所提议的解决方案都没有完全符合我的要求而且我无法找到一种方法来解决这些问题。我现在一直在寻找一周。
Windows 7机器(带有cygwin--虽然我没有触及它来解决这个问题),远程密码保护的git repo和svn repo。逐渐从使用svn转换为git用于新项目(之前没有人使用过git)并且需要来回移动代码。
我和其他几个人应该能够在gitproject/path/to/sharedcode
中工作,并让我们的提交自动更新svnproject/trunk/path/to/sharedcode
。这应该只影响这两个子目录,其余的repos应该保持独立。 我正在寻找从git到Subversion的单向永久链接。历史需要保留在git中,但不能保存在svn中,因为那里不会发生任何开发。此外,我们希望这是可重复的,以便将来我们可以以同样的方式设置anothersvnproject/trunk/path/to/sharedcode
作为镜像。
gitproject/path/to/sharedcode
(运行git diff
)中的更改的脚本,如果找到,则复制它们并将它们推送到svn repo。这可以每天自动运行,也可以由进行一些更改的开发人员调用。git push gitproject master
,将更改推送到git和svn。或者,如果一切都失败了,
SubGit对于我们的目的来说看起来有点过分,而且我不想/无权设置它,因为它不是开源的。我想在不创建新回购的情况下这样做。
使用git-svn在gitproject/path/to/sharedcode
中使用git svn init --trunk=http://svnhost.com/svnproject/trunk/path/to/sharedcode --no-minimize-url
创建新的回购。这会创建一个我可以推送的新本地仓库,可能对批处理脚本有用,但它不是理想的解决方案。
Git2Svn看起来很有希望,但我找不到任何相关文档,所以我不相信它。
之前我使用过Svn2Git(用红宝石编写的版本)并且效果很好,但我认为它不具备我现在需要的功能。
Git-Subversion Bridge看起来非常类似于我们想要的自动同步,但同样,它很复杂,涉及设置一个全新的回购。如果我得到团队其他成员的帮助,我们可能最终会使用它。
我也尝试编写我描述的Windows批处理脚本。它类似于:git pull
gitproject的最新版本,在git diff
和gitproject/sharedcode
上运行svnproject/sharedcode
,管道输出到txt文件,使用可怕的,糟糕的Windows { {1}}声明如果IF
选择除自述文件以外的任何内容,diff
ROBOCOPY /MIR
至gitproject/sharedcode
,svnproject/sharedcode
的内容,请提供正确的自述文件备份到ROBOCOPY
,svnproject/sharedcode
所有内容,svn add
来自远程仓库,最后是svn checkout
。它没有用。
我确信我拥有解决方案的所有部分,但我缺乏将它们整合在一起的知识和编码技能。我希望stackoverflow可以提供帮助。
答案 0 :(得分:1)
/path/to/sharedcode
转换为其他特殊存储库。您可以使用Submodules或Subtree方法(时髦的Git-boys更喜欢今天子树)svnproject/trunk/path/to/sharedcode
(Git-history将镜像到SVN,但这是最懒惰和最简单的方式)答案 1 :(得分:0)
我不同意Lazy Badger's answer。虽然您无法检出git
回购的一部分。您可以检出git
存储库,并在子树上使用文件系统操作。因此,您可以有两个结帐:svn
存储库之一,另一个git
存储库。然后,您可以使用脚本(也许使用rsync
)来同步适当的子目录。没有理由检查差异。版本控制将为您完成此操作。然后,您可以将更改提交到svn存储库。该脚本可以作为cron
作业运行。只要您只需要同步一个分支,此方法就可以使用。
目前我无法找到代码,但是我们有一个大型的git
存储库,而另一个团队的svn
存储库则使用类似的方法维护子树的只读副本。