当前位置:  开发笔记 > 编程语言 > 正文

将Google Code Subversion存储库分叉并同步到GitHub中

如何解决《将GoogleCodeSubversion存储库分叉并同步到GitHub中》经验,为你挑选了3个好方法。

如何将我没有写入权限的Google Code Subversion存储库与GitHub存储库保持同步?

我希望能够在我的Git存储库中开发自己的功能,但我也希望与Google Code Subversion存储库同步.从Google Code项目端获取修复程序.

我知道git-svn并在之前和下游使用它到我完全控制的Subversion存储库.但我不知道如何与Google Code Subversion存储库保持同步.



1> richq..:

git-svn的远程分支与普通的Git远程分支几乎相同.因此,在您的本地存储库中,您可以使用git-svn克隆并将更改推送到GitHub.Git不关心.如果您创建了git-svn克隆并将完全相同的更改推送到GitHub,那么您将拥有Google Code存储库的非官方镜像.其余的是香草Git.

git svn clone http://example.googlecode.com/svn -s
git remote add origin git@github.com:example/example.git
git push origin master

既然你有这个,偶尔你必须将Subversion存储库与Git同步.它看起来像:

git svn rebase
git push

在gitk或其他什么,这看起来像这样:

o [master][remotes/trunk][remotes/origin/master]
|
o
|
o

当你跑步时git svn rebase,你会有这样的:

o [master][remotes/trunk]
|
o
|
o [remotes/origin/master]
|
o
|
o

所以现在运行git push会将这些提交推送到那里的[remotes/origin/master]分支GitHub .你将回到第一个ASCII艺术图中的场景.

现在的问题是,你如何将你的变化融入到混合中?这个想法是,你永远不会进入同一个分支,你就是git-svn-rebase-ing和git-pushing.您需要一个单独的分支来进行更改.否则,你最终会在Subversion之上重新定义你的更改,这可能会破坏任何克隆你的Git存储库的人.跟着我?好的,所以你创建了一个分支,我们称之为"功能".然后你做了一个提交并将它推送到GitHub到功能分支.你的gitk看起来像这样:

o [features][remotes/origin/features]
|
o
|
o [master][remotes/trunk][remotes/origin/master]
|
o

在这里,你的功能分支在Google Code分支之前提交了一些提交,对吧?那么当您想要整合Google代码中的新内容时会发生什么?你先跑,git svn rebase然后得到这个:

                           o [features][remotes/origin/features]
[master][remotes/trunk] o  |
                        |  o
                        o /
                        |/
                        o[remotes/origin/master]
                        |
                        o

如果你git push掌握了,你可以想象[遥控器/原点/主人]与主人在同一点.但是您的功能分支没有更改.您现在的选择是将master合并到功能或rebase功能.合并看起来像这样

git checkout features
git merge master 

            o [features]
           /|
          / o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o

然后你将功能推送到GitHub.我已经离开遥控器为主人节省空间,他们与[主人]在同一点.

rebase方法稍微有些恶意 - 你必须推动使用--force,因为你的推送不会是快速合并(你可以从克隆它的人手中拉出功能分支).这样做并不是真的可以,但如果你有决心,没有人可以阻止你.它确实使一些事情变得更容易,例如当补丁以略微重写的形式上游接受时.它不仅可以解决冲突问题,还可以直接修改 - 修补上流的补丁.无论如何,一个rebase将是这样的:

git rebase master features

         o [features]
         |
         o
         |  o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o

然后你就必须git push --force这样做.你可以看到为什么你需要强制它,历史从[遥控器/原点/功能]到新的当前后期变换[功能]有一个很大的分裂.

这一切都有效,但需要付出很多努力.如果你要成为一个常规的贡献者,最好的办法就是这样工作一段时间,向上游发送一些补丁,看看你是否可以获得Subversion的提交权限.如果做不到这一点,也许不要将你的更改推给GitHub.保持他们的本地化,并尝试让他们接受上游.



2> Mechanical s..:
svn2github服务

网站http://svn2github.com/提供了一个服务,可以将任何可公开访问的SVN存储库分配到Github上(https://github.com/svn2github/projectname).我尝试过这个; 在按下"制作镜子"时,它显然没有做几秒钟并显示消息"错误",但它实际上有效.实际上创建了新的存储库,其中包含来自SVN repo的代码.

然后,您将分叉它创建的存储库,并在您自己的fork上工作.然后,您将使用其bugtracker将更改提交到上游项目.

查看服务的Github用户下的现有存储库(例如"svn2github在svn2github/haxe 5小时前推送到主服务器"),它似乎经常从SVN存储库中获取更改.没有关于谁在网站上运行该服务的信息,所以我不打赌它继续无限期运行,但它现在可以工作(如果它永远停止,你仍然可以手动更新你的分支).

发射台

如果您没有开始使用Git和Github,另一种方法是使用Launchpad.net.Launchpad可以自动将SVN(也是CVS)存储库导入个人bzr分支.为此,请创建一个Launchpad项目,然后转到新的导入页面,选择Subversion并输入URL(例如http://projectname.googlecode.com/svn/trunk/).根据项目大小,初始导入可能需要几个小时.后续导入将定期运行.

有关更多文档,请参阅Launchpad帮助中的VCS Imports.



3> akaihola..:

fnokd.com提供了从Google Code同步到GitHub的演练.作者使用永远在线的远程服务器和cron作业来自动化同步,并将SVN中继保存在名为"vendor"的GitHub分支中.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有