2011-02-27 132 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

相關問題