2014-02-18 3 views
1

Мы хотим, чтобы GitHub установил локальный репозиторий Git 20.00+, но оказалось, что хотя передача сама по себе не проблема, GitHub фактически не обрабатывает более 1000 транзакций за раз («процесс» означает, что они будут ссылка фиксирует вопросы и т. д.).Выполняет «chunked» нажатие на удаленный Git repo?

Поэтому, чтобы иметь возможность правильно перенести этот репозиторий и обработать его правильно, мы должны передать «куски» не более 1000 за раз. Но как?

Мы попытались как-то вернуться в историю, двигаясь вперед в блоках и толкаясь каждый раз, но мы должны использовать неправильный «порядок», потому что это приводит к множеству проблем.

+0

Какие проблемы? –

+0

Такие вещи, как: Ошибка: не удалось нажать некоторые ссылки на «источник» Подсказка: обновления были отклонены, потому что кончик текущей ветки находится за . Совет: его удаленный аналог. Объедините удаленные изменения (например, «git pull») Подсказка: перед повторным нажатием. Подсказка: см. «Замечание о быстрых форвардах» в «git push -help» для получения дополнительной информации. (извините за беспорядок, похоже, не получается форматировать здесь) – Quintesse

+0

Вы можете добавить только форматирование в вопрос. Он доступен для редактирования и является подходящим местом для добавления дополнительной информации, о которой вы просите. –

ответ

2

условии, что вы используете Баш вы можете запустить следующий сценарий:

#!/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 является синтаксисом Гит и обозначает n-й совершают перед тем master.

+0

Практически там, но это 'git push []]', поэтому вам нужно упомянуть репозиторий и указать упоминание о ветке цели, потому что 'HEAD ~ 13261' - это _not_ a refspec (это только комичный) –

+0

Спасибо, я тоже заметил. –

+0

Редактирование объявлений: 'HEAD ~ $ i' является _not refspec_. Это не будет принято. Потому что вы можете нажать ревизию, но вы должны нажать ее на ветку. –

0

Один обычно толкает ссылки на пульт дистанционного управления, так что вы должны git reset вашей master ветви любые совершить это elegible быть поручен (то есть, это меньше, чем 1000 коммитов начала репо или последний толкнул фиксации). Скажем, вы определили (с использованием tig или git log) Ваш 998-й фиксации является abd123124 и 1980-х гг совершить это 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~19000, real_master~180000, и т.д).

+0

Нет необходимости перезагружать. Вы можете подталкивать изменения. –

Смежные вопросы