如何正确使用git-svn,svn-ers checkout svnrepo和git-ers clone gitrepo,不小心提交

时间:2011-08-19 19:47:50

标签: git svn git-svn

在我的公司,我们使用SVN,但希望无缝将来切换到GIT。这就是为什么我开始学习git-svn,它有望成为svn存储库的前端。

我尝试使用以下设置:

  • SVNREPO - 主svn存储库
  • GITREPO - SVNREPO的git-svn克隆
  • REPO1,REPO2,... - 代表git-ers的GITREPO的git克隆

要求是:

  • [ManyGitUsers]许多giters可以克隆/推送到GITREPO
  • [ManySvnUsers]许多svners承诺使用SVNREPO
  • GUIREPO和SVNREPO之间的
  • [SyncHook]同步可以通过钩子完成,也可以在开发钩子之前由管理员手动完成
  • [NoInteraction] giters不想知道有关SVNREPO的任何信息,反之亦然
  • [NoProactivity]用户在发生问题时解决所有问题(冲突);他们不与他人同步以避免他们

问题:

  1. 使用git-svn可以设置吗?如果有更好的建议,建议其他
  2. 我应该如何配置GITREPO?
  3. giters需要注意特殊的后端,还是一切都透明?
  4. 到目前为止,我的实验表明它 moreless 有效,但是提交到SVNREPO会破坏与git同步的可能性。我只相信原因是我发出了错误的命令......

3 个答案:

答案 0 :(得分:4)

git-svn有一种替代方案可以满足您的需求:SubGit。我正在研究SubGit项目,但我希望这个答案是相关的,不会被视为垃圾邮件。

SubGit是一种在服务器端安装到存储库中的工具。然后,您将能够使用“git clone”或checkout作为Subversion工作副本克隆该存储库。 Git用户将像普通Git存储库一样工作,不需要特殊命令。对于Subversion用户来说,这是正确的。

Git和Subversion方面会自动由SubGit保持同步。

答案 1 :(得分:1)

我认为这不会长期存在并且会引起问题。

首先让我谈谈如何完成svn镜像:

通常,有一个主仓库和一个奴隶仓库(通常在不同的位置,因此需要)。 svners,在主要位置结帐并从主人提交。从属位置检出并在从属位置提交。但实际的设置是,每当有人提交镜像时,slave的提交首先提交给master,然后镜像回slave(svnsync)。最终用户不知道这一点。这确保了回购同步。有关此设置的更多说明:http://www.tty1.net/blog/2007-08-26-subversion-proxy_en.html

现在,带上Git,变得困难。问题是,在Git仓库和SVN仓库中可能存在近乎同时提交的提交。如果SVN中的提交被应用并且新的提交来自Git(它没有在SVN中看到新的提交),那么你将遇到很多麻烦。

您可以拥有的设置是所有用户都使用git-svn直接“克隆”svn repo。然后他们可以像任何其他svn客户端一样使用git repo。

或者像你提到的那样有一个中央git repo(用git-svn克隆)并且所有gite从它克隆并推送到它。来自中央仓库的git svn rebasegit svn dcommit有一个钩子,但是当事情破裂时,有人会手动修复仓库。

答案 2 :(得分:0)

有效。搜索/阅读文档。还有大量书籍可以解决这个问题。

基本上GIT用户负有全部责任,SVN方面的一切都保持不变。

在每个SVN提交中,GIT用户必须git svn rebase。在每次GIT提交时,GIT用户都必须git svn dcommit