当主存储库是SVN时,在本地使用Git

时间:2009-11-05 10:29:32

标签: svn git git-svn

有一个我想要结帐并参与的开源项目。主存储库是SVN,但我想在Git中工作。这可能吗?

我的大部分搜索都会显示你从SVN移动到Git(或者相反)的指南,不要回头看。

  • 如果我签出项目,进行更改并将其推送到我在Github上创建的分支,我该如何通知原作者?
  • 将Git回购中的贡献包含在SVN回购中有多难?
  • 只是比较两个版本(我最近的结帐/拉取/更新和我自己的本地最新提交),从中生成一个补丁并发送给它们;这应该被视为后备工作流程还是标准方法?

假设原作者对SVN以外的任何其他内容没有任何兴趣。

[更新] 我没有,也不想拥有,提交对SVN存储库的访问权限。我正在寻找解决方法。

[Update2] 如果补丁确实是我唯一的选择,我应该注意哪些其他警告?

4 个答案:

答案 0 :(得分:7)

幸运的是,git-svn正是出于这个目的。它使您可以在本地使用git,同时还可以在您希望的时候登录SVN。这是相当简单的,如果您在此处或通过Google搜索git-svn,则会提供大量信息。

http://flavio.castelli.name/howto_use_git_with_svn有一个教程,你可能想先看一下。

编辑:要生成与SVN兼容的差异,您可以使用git diff --no-prefix。但请注意,此格式与TortoiseSVN不兼容。如果需要兼容性,则必须使用某种shell脚本;请参阅此处的示例:http://mojodna.net/2009/02/24/my-work-git-workflow.html

编辑: git-svn的一个潜在缺点是它不处理svn外部。你必须自己处理这些。

祝你好运!

答案 1 :(得分:7)

保持Git存储库与Subversion存储库同步非常简单:

克隆Subversion存储库(在这个简单的例子中,我忽略了分支/标签)

$ git svn clone https://url/to/repo/trunk

与Subversion主干保持同步:

$ git svn rebase

现在,如果您有提交Subversion仓库的权限,则可以推送您的更改:

$ git commit
$ git svn dcommit

否则,如果Subversion存储库的提交者对使用Git没兴趣,则提交补丁是唯一的选择:

$ git diff 1cc92b96 > my_patch.patch

在这种情况下,最好不要提交你正在与Subversion repo同步的分支。

答案 2 :(得分:3)

是的!这是可能的!

查看此帖子了解详情:http://www.romanenco.com/gitsvn

有三到四个简单的步骤来实现SVN和Git SCM的共生。

我使用这项技术大约三个月,没有任何麻烦。这很酷!当您在SVN中使用主仓库时,您可以进行离线提交并获得强大的Git合并功能。

答案 3 :(得分:1)

如果没有,也不想拥有,则提交对SVN存储库的访问权限,那么git-svnStGit的组合可能有所帮助。 git-svn创建/更新克隆,stg在其上维护一系列补丁(stg命令来自StGit Crash Course):

git svn clone ..

stg new invent-some-patch-id
...edit patch description...
...hack hack hack in the tree...
stg refresh
...possibly hack some more...
stg refresh    
..
stg mail

请参阅StGIT Tutorial开始使用。

注意:我实际上没有尝试过这个工作流程。