2010-09-19 134 views
1

如何克隆git回购从我的笔记本电脑(在家中)到服务器(在大学),同时从一个服务器获得大部分回购第三个(svn)repo在另一个uni这是主要的代码库。我想通过最大化uniOne < - > uniTwo流量来尽量减少主页数量。克隆git-svn回购获得所有的svn部分从原始svn回购

这是我现在有笔记本电脑:

--o--o--o---o---o---o git-svn trunk 
     `--o--o-o--o git mybranch 

,这是我希望得到的UNIONE:

--o--o--o---o---o---o git-svn trunk <-- from uniTwo 
     `--o--o-o--o git mybranch <-- from Laptop 

克隆回购后应该能够从笔记本电脑拉分支。

我试过了:在uniOne上:git-svn克隆uniTwo,git远程添加笔记本电脑,但后来git fetch希望从笔记本电脑获取整个事情。我想可能使用git clone --depth x Laptop,然后将它们一起移植到一起可能会起作用,但它仍然需要传输所有源文件Laptop-> uniOne,而不仅仅是更改。我可以尝试从笔记本电脑中导出所有补丁,然后将它们应用于新的svn结帐,然后让它跟踪我的笔记本电脑上的分支(如果可以的话),但是等到我接下来在uni然后再等待只是正常克隆。

+0

您的uniOne/uniTwo描述有些混乱。你能否更新和澄清?这是我迄今为止的理解: 您的大学有一个Subversion存储库,您必须与之交互。您想要将此SVN存储库中的项目复制到Git存储库中,然后您可以将它放在笔记本电脑上,对吗? – 2010-09-28 13:08:12

+0

有两个unis:一个是svn repo(uniTwo),另一个是我可以访问大型计算机的时间(uniOne)。我在我的笔记本电脑上开发模拟器并在uniOne上运行它们。关键是我家里的笔记本电脑的上传速度非常缓慢,所有三台电脑相隔甚远。在uniOne上,我希望能够从笔记本电脑中拉出来,但是尽可能从uniTwo的svn回购中获得。 – myles 2010-09-29 12:53:15

回答

0

让我们来定义你的仓库:

  • 混帐svn的 < - 这是在大学
  • 版本库
  • UNI /主 < - 这是你的大学的Git仓库。这是一个“获取存储库”,可以从Subversion仓库获取最新的历史记录。
  • 笔记本电脑/主 < - 这是您的笔记本电脑上的Git存储库。这是你工作的地方。

我建议以下设置:

git svn clone的混帐svn的创建UNI /主。 自动或定期更新uni/mastergit-svn通过运行git svn rebase(触发器提交挂钩,cron-job或每次您在Uni时手动)的最新更改。

创建笔记本电脑/主通过克隆uni/master。在这里,您可以根据需要经常在本地提交。当你在大学时,通过运行git pull --rebase(你总是必须做 - 重新保持历史线性,因为SVN不理解git-branches),从uni/master获得最新更改。

当你想要把您的笔记本电脑变回混帐svn的,你必须配置的git - svn的您笔记本电脑/主第一遥控:

git svn init https://url.to.uni-svn-repo 

现在,你可以把您的最新变化回到uni-svngit svn dcommit。请注意,您可能必须首先更新对uni/master中最新提交的引用。第一:

git update-ref refs/remotes/git-svn refs/remotes/uni/master 

不要试图从你的笔记本电脑/主UNI /主推。这只会带来混乱,因为重装/重写历史会混淆Git,当它试图再次与git-svn同步。

另请参见http://www.tfnico.com/presentations/git-and-subversion其中我已经开始收集了一些与Git和SVN一起工作的技巧。