2014-02-18 97 views
1

我們想將一個20.00以上的提交本地Git倉庫推送到GitHub,但事實證明,儘管轉移本身沒有問題,GitHub實際上並不一次處理超過1000次提交(「process」意味着它們會鏈接提交問題等)。「chunked」是否推向遠程Git回購?

因此,爲了能夠正確地傳輸這個存儲庫並使其正確處理,我們應該一次傳輸不超過1000個「塊」。但是如何?

我們嘗試以某種方式回到歷史中,每次向前推進,但是我們必須使用錯誤的「排序」,因爲這隻會導致很多問題。

+0

什麼樣的問題? –

+0

像這樣的事情: 錯誤:未能將某些參考推送到'起源' 提示:更新被拒絕,因爲您當前分支的提示位於 提示:其遠程對應端。合併遠程更改(例如'git pull') 提示:再次推送之前。 提示:有關詳細信息,請參閱'git push --help'中的'關於快速轉發的注意事項'。 (抱歉亂七八糟,似乎無法讓格式化在這裏工作) – Quintesse

+0

您只能在問題中添加格式。它是可編輯的,並且是添加更多細節的適當位置。 –

回答

2

只要你使用bash,你可以運行下面的腳本:

#!/bin/bash 
for i in $(seq 20000 -900 0) 
do 
    git push origin master~$i:master 
done 
git push origin master:master 

它會遍歷從20000到0和反覆推致力於遠程分支master

master~n是Git語法並且表示master之前的第n次提交。

+0

幾乎在那裏,但它'git push [ []]',所以你不得不提到存儲庫,不得不提及目標分支,因爲'HEAD〜13261'不是refspec(它只是一個提交)。 –

+0

謝謝,我也注意到了。 –

+0

廣告編輯:'HEAD〜$ i'不屬於refspec_。它將不被接受。因爲你可以推送修訂,但你必須將其推送到分支。 –

0

人們通常推引用到遠程,所以你應該git resetmaster分支任何承諾這符合要求的被COMMITED(即,它是小於1000從回購的開頭提交或最後推提交)。假設你已經確定(使用tiggit log)您第九百九十八提交是abd123124和第一千九百八十零承諾是bad1424,您可以:

$ git checkout -b real_master # create a 'backup' branch for not losing the reference 
$ git checkout master 
$ git reset abd123124 # set master to the 998th commit 
$ git push origin master 
$ git reset bad1424 # set master to the 1980th commit 
$ git push origin master 

等。

我認爲你不應該對工作樹有任何問題,但如果你這樣做,git checkout .應該解決它。

你肯定可以做任何腳本自動這次提交發現的事情,但如果你知道你的回購的日誌大小,你可以使用real_master~NUMBER復位(比如,你的回購有正是 20K提交,你可以使用real_master~19000real_master~180000,等等)。

+0

沒有必要重置。您可以推送修訂版。 –