2010-12-08 90 views
0

我有一个非常缓慢的网络链接到我的远程存储库(称为repoSlow),我从中获取一段时间到我的主要开发回购(称之为repo1)。git从第二学位远程获取

有时我会将repo1克隆到另一个目录中的repo2以进行测试,例如,在其他分支上没有丢失repo1的状态(也涉及到对象文件和库,因此一个简单的存储不会这样做)。

为了将repoSlow的状态转换为repo2,我通常需要将repo1,checkout和merge分支(我感兴趣)从repoSlow复制到repo1,然后将它们提取到repo2。

除了它是一个繁琐的过程和其他一些事实,我有时不想合并到repo1中。检出一个不同的本地分支名称会导致一个大的命名混乱。

是否有一种简单而直接的方式实际上获取遥控器的遥控器?

我想一个更好的工作流程可能是将repoSlow克隆到裸机(或甚至是镜像的)本地回购,并多次克隆该回购,但为了更好地理解git,我保留原始问题。

回答

0

你说得对,最好将克隆到本地的裸回购作为你的整合点,然后克隆你的repo1和repo2。

但是要回答你原来的问题,我不相信有一种方法可以直接获取遥控器的遥控器;但是您可以从repo1中克隆repo2后,将repoSlow添加为repo2中的远程设备。如果你这样做,它只需要从repoSlow中获取它从repo1中克隆的东西,这应该比填充整个历史记录要快得多。

要做到这一点,只需运行从repo2内的下列:

git remote add upstream git://example.com/path/to/repo/slow.git 
git remote update 

现在你应该有repo2 2个遥控器; origin指的是repo1,和upstream(或任何你想称之为)指向你的repoSlow。

0

可以在repo2进行配置是这样的:

[remote "origin"] 
     fetch = +refs/heads/*:refs/remotes/origin/* 
     fetch = +refs/remotes/origin/*:refs/remotes/ancestor/* 

这告诉repo2不仅取repo1的分支机构(和反映他们为origin/*),而且还获取repo1的起源的跟踪分支(和镜子他们为ancestor/*

所以现在你只需要在repo1中做一个“git fetch”就可以从repoSlow中获取更改,而不需要改变任何本地分支,然后你就可以将这些更改提取到repo2中。