2009-11-05 73 views
11

有一个我想签出和贡献的开源项目。主要的存储库是SVN,但我想在Git中工作。这可能吗?当主存储库是SVN时使用Git本地工作

我的大部分搜索都会引导您从SVN移动到Git(或以其他方式),而不回头看。

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

假设原作者对学习SVN以外的任何东西没有兴趣。

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

[Update2]如果补丁确实是我唯一的选择,那么我是否还有其他注意事项需要注意?

回答

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外部。你将不得不自己处理这些。

祝你好运!

+0

是的,我看了一些在git-svn。从原始(SVN)回购中获取更新看起来很不错。但我主要对上游工作流感兴趣。如何正确处理和生成补丁(如果这是我唯一的选择)? – Mizipzor 2009-11-05 11:47:47

+0

我现在在我的答案中包含了有关生成SVN补丁的信息。 – lemonad 2009-11-05 13:31:06

3

是的!这个有可能!

检查这个职位的详细信息:http://www.romanenco.com/gitsvn

有三个或四个简单的步骤,使SVN和Git的SCM共生。

我使用这项技术约三个月,没有任何麻烦。非常酷!当你在SVN中进行主要的回购时,你可以进行离线提交并获得强大的Git合并。

6

保持同步一个Git仓库有一个Subversion版本库是很容易的:

克隆版本库(在这个简单的例子,我忽略分支/标签)

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

跟上,TO-日期与颠覆主干:现在

$ git svn rebase 

,如果你有提交权限到Subversion回购,你可以把你的变化:

$ git commit 
$ git svn dcommit 

否则,提交一个补丁是你唯一的选择,如果提交者在Subversion版本库在使用Git没有兴趣:

$ git diff 1cc92b96 > my_patch.patch 

在这种情况下,它显然是最好不要使提交到分支你正在与Subversion回购同步。

+0

为什么我应该向分支进行提交同步?仅仅是因为它更容易生成差异(因为我只有,然后,需要一个提交ID)? – Mizipzor 2009-11-05 11:46:24

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上手。

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

+0

有趣的是,谢谢,当我回家时,检查StGit。我其实认为这里最大的问题是试图与那些不相信分布式版本控制系统的人合作。但他们只是手动处理补丁,所以我越来越意识到,它可能是要走的路。 – Mizipzor 2009-11-06 07:55:17

相关问题