我的客户正在使用SVN,而我的公司正在使用Git(中央裸Git仓库)。所以我有同步两台服务器的任务。我无法使用SubGit,因为我无法在任何一台服务器上进行任何修改。
我成功使用git-svn将SVN下载到我当地的Git仓库(使用TortoiseGit)。但我无法弄清楚如何在中央Git存储库中设置远程上游(在Eclipse中使用Egit)。
是否可以设置一个远程分支,这样我就可以将我当地Git的SVN内容检入中央Git仓库?怎么样?
感谢。
答案 0 :(得分:1)
如果我理解正确,您无法更新SVN和Git存储库中的挂钩。这使得任务变得非常复杂,因为如果有人在同一时刻提交SVN,你就不能拒绝推送Git,反之亦然。
我认为,git-svn不是解决方案,因为在向SVN(“git svn dcommit”)发送提交时,它会更改Git commit SHA-1以添加git-svn-id:
签名。因此,当您将提交C推送到您的Git存储库时,您将获取该提交到您的git-svn repsository,运行“git svn dcommit”,它将其转换为SVN并添加git-svn-id:
签名以提交消息,从而更改提交SHA -1,所以你将在git-svn存储库中获得另一个提交C'。之后,C'应该被发送回Git存储库,之后推送C的用户应该下载C'并在其工作副本中用C'替换C.因此,您将无法轻松,透明地同步。
使用SubGit,您可以通过创建安装了SubGit的“中间”Git存储库,将您的问题减少到2 Git存储库的同步。 2 Git存储库的同步是一个更简单的任务(并且在互联网上有很多解决方案)但它仍然不是小菜一碟,因为2个不同的用户可以同时推入这两个存储库(并且你不能丢弃其中一个推送,因为您无法在存储库中创建挂钩)。如果这些更改有冲突,您可以解决仅手动,我担心这是您可以做的最好的事情:使用2个远程创建存储库并使用脚本不断从其中一个获取更改并将更改推送到另一个,反之亦然(并通知管理员并在同时发生冲突的更改时停止同步)。
免责声明:我可能有偏见,因为我是SubGit开发人员之一。