我有一个非常慢的网络链接到我的远程存储库(称之为repoSlow),我偶尔会将其提取到我的主开发仓库(称之为repo1)。
有时我将repo1克隆到另一个目录中的repo2进行测试,例如在其他分支上没有丢失repo1的状态(也涉及对象文件和库,因此一个简单的存储不会这样做。)
为了将repoSlow的状态变为repo2,我通常会将repo1,checkout和每个分支(我感兴趣)从repoSlow存储到repo1,然后将它们提取到repo2。
除了这是一个繁琐的程序和其他一些事实,我有时不想在repo1中合并。签出不同的本地分支名称将导致命名混乱。
实际上是否可以轻松直接地获取遥控器的遥控器?
我想更好的工作流程可能是将repoSlow克隆到裸(甚至镜像?)本地仓库并多次克隆那个,但为了更好地理解git,我保留了原来的问题。
答案 0 :(得分:0)
你是对的,最好在本地克隆一个裸仓库作为你的集成点,然后从那里克隆你的repo1和repo2。
但是要回答你原来的问题,我不相信有办法直接取遥控器的遥控器;但是你可以在repo1克隆后将repoSlow添加为repo2中的远程。如果你这样做,它只需要从repoSlow中获取它没有从repo1克隆的东西,这应该比填充完整的历史快得多。
要执行此操作,只需在repo2中运行以下命令:
git remote add upstream git://example.com/path/to/repo/slow.git
git remote update
现在你应该在repo2中有两个遥控器; origin
引用repo1,upstream
(或任何你想称之为)指向你的repoSlow。
答案 1 :(得分: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中。