2014-02-18 98 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

没有必要重置。您可以推送修订版。 –