2011-02-27 115 views
3

我需要从几个不同的存储库(所有远程分支和所有对这些分支的更改)中获取所有内容。我试图git pull --all但出于某种原因,我得到以下信息:从git存储库中提取所有未获取的更改

There are no candidates for merging among the refs that you just fetched. 
Generally this means that you provided a wildcard refspec which had no 
matches on the remote end. 

所以我怎么会去确保我得到的所有从库中的变化(不知道树枝都是对等的到底是什么,如果可能的话)?

所有帮助表示感谢,并提前致谢!

+1

您需要这样做的场景是什么?听起来有点像一个坏主意... – icco 2011-02-27 03:02:21

+0

icco - 好吧,我从一些项目中删除了一些意外分支。并在更新过程中以某种方式瘫痪我的服务器。但是我不知怎么的让git能够工作,所以我想在补充它并重新开始之前支持它。 – 2011-02-27 03:15:21

+0

因此,你有一个存储库与多个遥控器,每个都有不同的分支比对方?这听起来像一个悲惨的设置......你的所有遥控器在这台破碎的机器上? – icco 2011-02-27 03:19:32

回答

6

一般来说 - 这真是一个非常糟糕的主意。不要这样做。 “所有的远程分支”通常都会包含工作中的代码,被遗弃的代码,相同功能的冲突实现等。尝试将它们全部合并到本地树中是一种灾难。现在

,如果你真想做你的建议很无聊的事,你可以做它像这样:

git fetch remote_source 
git merge $(git branch -r | grep remote_source) 

现在,如果你真正想要做的是有一个地方复制所有远程更改的,而不尝试将它们合并到您的树中,那么您根本不需要进行拉取或合并; git fetch remote_source这一切都为你。当然,它不会创建映射到远程的本地分支 - 但它可以拉远程分支,并且可以根据需要创建本地分支,而无需与远程源进行进一步的通信。


考虑进一步的问题描述的意见,这听起来像你真的想要的是从旧的远程所有分支推到一个新的远程,将它们合并到一个单一的树。要做到这一点,你可能需要像下面这样的东西:

args=() 
for remote_branch in $(git branch -r | grep OLD_REMOTE/); do 
    branch_name=${remote_branch#*/} 
    args+=("${remote_branch}:${branch_name}") 
done 
git push NEW_REMOTE "${args[@]}" 
+0

我同意这将是一个相当糟糕的主意 - 如果存储库不只是由我使用。现在,因为我想要做的是获取数据,将我的服务器恢复到某种工作顺序的外观,然后恢复所有这些数据,只需一次获取(然后是推送?或者我需要为此合并? )工作?谢谢! – 2011-02-27 03:17:30

+0

@ adam_0,只是一个获取所有数据。它并没有将它合并,但它使它全部可用......例如,您在此时已经在本地副本上提供了所有远程分支。 – 2011-02-27 04:14:13

+0

因此,如果我要获取数据,然后推送到一个新的远程,所有的数据将被传输?或者会让我想指定分支?如果我可以这样做,问题解决了 – 2011-02-27 04:22:15

2

这似乎是一个非常糟糕的主意。但我想你知道你在做什么。

我使用下面的bash一个班轮虽然做推到所有的遥控器,我已经修改做拉来代替。

for i in $(git remote); do git pull $i master; done; 
+0

这将工作得非常出色,除非我的本地副本上没有所有的遥控器。 – 2011-02-27 03:18:16

相关问题