[英]Mirroring a git subdirectory in a SVN subdirectory
是的,我知道这里已经有大量的版本控制问题,但没有一个提议的解决方案完全符合我的要求,而且我找不到一种方法来破解它们。 我已经找了一个星期了。
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 (用 Ruby 编写的那个)并且它工作得很好,但我认为它没有我现在需要的功能。
Git-Subversion Bridge看起来与我们想要的自动同步非常相似,但同样,它很复杂并且涉及设置一个全新的存储库。 如果我得到团队其他成员的帮助,我们可能最终会使用它。
我还尝试编写我描述的 Windows 批处理脚本。 它是这样的: git pull
最新版本的 gitproject,在gitproject/sharedcode
和svnproject/sharedcode
上运行一个git diff
,通过管道输出到一个 txt 文件,使用可怕的、可怕的 Windows IF
语句来说明如果diff
选择了除此之外的任何东西README, ROBOCOPY /MIR
gitproject/sharedcode
的内容到svnproject/sharedcode
, ROBOCOPY
从备份到svnproject/sharedcode
的正确 README , svn add
所有内容,从远程 repo svn checkout
,最后svn commit
。 它没有用。
我确信我拥有解决方案的所有部分,但我缺乏将它们整合在一起的知识和编码技能。 我希望 stackoverflow 可以提供帮助。
我不同意Lazy Badger 的回答。 尽管您无法查看git
库的一部分。 您可以查看git
repo 并在子树上使用文件系统操作。 因此,您可以有两个结帐:一个是svn
库,另一个是git
库。 然后您可以使用脚本(可能使用rsync
)来同步适当的子目录。 没有理由检查差异。 版本控制将为您执行此操作。 然后您可以将更改提交到 svn 存储库。 此脚本可以作为cron
作业运行。 只要您只需要同步单个分支,这就会起作用。
我现在找不到代码,但是我们有一个很大的git
repo,另一个团队的svn
repo 使用类似的方法维护子树的只读副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.