Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 分叉并将Google代码Subversion存储库同步到GitHub_Svn_Git_Github - Fatal编程技术网

Svn 分叉并将Google代码Subversion存储库同步到GitHub

Svn 分叉并将Google代码Subversion存储库同步到GitHub,svn,git,github,Svn,Git,Github,如何将我没有写入权限的Google Code Subversion存储库转移到GitHub存储库并与之保持同步 我希望能够在我的Git存储库中开发我自己的功能,但我也希望与Google Code Subversion存储库同步。从Google代码项目端获取修复 我了解git svn,并曾将其用于我完全控制的Subversion存储库的上下游。但我不知道如何与谷歌代码颠覆库保持同步。嗯。。在我的公司里,我也在做同样的事情。只是将.svn和.git repo放在同一个目录中(您签出svn repo并

如何将我没有写入权限的Google Code Subversion存储库转移到GitHub存储库并与之保持同步

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


我了解git svn,并曾将其用于我完全控制的Subversion存储库的上下游。但我不知道如何与谷歌代码颠覆库保持同步。

嗯。。在我的公司里,我也在做同样的事情。只是将.svn和.git repo放在同一个目录中(您签出svn repo并在此工作副本中创建git repo)


然后使用svn-up和git-push完成了这件事。当然,如果你有很多分歧,你必须手工合并。git svn的远程分支与常规git远程分支几乎相同。因此,在本地存储库中,您可以克隆git svn并将更改推送到GitHub。吉特不在乎。如果您创建git svn克隆并将完全相同的更改推送到GitHub,您将拥有Google代码库的非官方镜像。剩下的是香草吉特

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
o [features][remotes/origin/features]
|
o
|
o [master][remotes/trunk][remotes/origin/master]
|
o
git rebase master features

         o [features]
         |
         o
         |  o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o
当您运行
git svn rebase
时,您会看到:

o [master][remotes/trunk]
|
o
|
o [remotes/origin/master]
|
o
|
o
所以现在运行
gitpush
将把这些提交推送到GitHub,那里的[remotes/origin/master]分支。您将回到第一个ASCII艺术图中的场景

现在的问题是,您如何将您的更改应用到组合中?这样做的目的是,您永远不会提交到与git svn rebase ing和git Push相同的分支上。您的更改需要一个单独的分支。否则,您最终会在Subversion的基础上重新调整更改,这可能会让克隆您的Git存储库的任何人感到不安。跟着我?好的,那么您创建了一个分支,我们称之为“features”。然后进行提交并将其推送到GitHub的features分支。你的gitk看起来像这样:

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

         o [features]
         |
         o
         |  o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o
在这里,您的特性分支在Google代码分支之前有几个提交,对吗?那么,当您想要合并来自谷歌代码的新内容时会发生什么呢?首先运行
git svn rebase
,得到以下结果:

                           o [features][remotes/origin/features]
[master][remotes/trunk] o  |
                        |  o
                        o /
                        |/
                        o[remotes/origin/master]
                        |
                        o
如果您
git将
master推出,您可以想象[remotes/origin/master]与master位于同一点。但是您的功能分支没有更改。现在,您可以选择将主控形状合并到要素中,或重新设置要素的基础。合并看起来像这样

git checkout features
git merge master 

            o [features]
           /|
          / o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o
然后将功能推送到GitHub。为了节省空间,我把遥控器留给了master,它们应该和[master]在同一点上

rebase方法稍微邪恶一些——你必须用——强制来推动,因为你的推动不会是一个快进的合并(你会从克隆它的人下面拉特性分支)。这样做并不算好,但如果你下定决心,没有人能阻止你。它也使一些事情变得更容易,例如当补丁以稍微修改的形式被上游接受时。这样就不用再处理冲突了,你只需重新设置基础,跳过上游的补丁。无论如何,重基应该是这样的:

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

         o [features]
         |
         o
         |  o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o
然后你就必须
git push--force
。你可以看到为什么你需要强制它,从[remotes/origin/features]到新的当前的后重基[features],历史上有一个很大的旧分歧


这一切都是可行的,但需要付出很多努力。如果你打算成为一名普通的贡献者,最好的办法就是像这样工作一段时间,向上游发送一些补丁,看看你是否可以获得Subversion的提交访问权。如果做不到这一点,也许就不要将更改推送到GitHub。保持它们的本地性,并尝试让它们在上游被接受。

我不太确定您想要的是什么,但当然,您可以从subversion存储库中提取,然后从同一个工作副本推送到Git存储库中。您还可以
git svn dcommit
返回subversion存储库。但是,您不能使GitHub存储库与subversion存储库同步。此外,当您的工作副本中有尚未在subversion存储库中的提交时,如果subversion存储库已更新,您将需要重新设置这些提交的基础,从而迫使您
git push--force
将“新”提交到GitHub。

有关从Google代码同步到GitHub的详细信息,请访问。作者使用一个始终在线的远程服务器和一个cron作业来自动化同步,并将SVN主干保存在一个名为“vendor”的GitHub分支中。GitHub现在支持直接导入subversion项目(请参阅)。只需创建一个新的回购协议,然后在“下一步”屏幕上单击“从Subversion导入”。但它不支持进一步同步:/。

svn2github服务 该网站提供了一项服务,可以将任何可公开访问的SVN存储库转移到Github(at)上。我试过了;按下“制作一面镜子”几秒钟后,它似乎什么也没做,并显示“错误”消息,但它确实工作了。事实上,新的存储库已经创建,其中包含来自SVN repo的代码

然后,您将对它创建的存储库进行分叉,并使用自己的分叉。然后,您将使用bugtracker向上游项目提交更改

查看该服务的Github用户下的现有存储库(例如,“svn2github在svn2github/haxe被推到master 5小时前”),它似乎定期从SVN存储库中引入更改。网站上没有关于谁运行这项服务的信息,所以我不会打赌它会无限期地继续运行,但它现在起作用(如果它停止运行,你仍然可以手动更新你的fork)

发射台 如果你是