Альтернативный способ сделать первоначальный толчок большого репо - PullRequest
9 голосов
/ 30 декабря 2011

У меня есть большое приложение на Rails 3.1 в разработке и производстве, для которого я только что настроил промежуточную среду для Heroku.Поскольку мой репозиторий Git довольно большой, я получаю ошибки тайм-аута около 33% каждый раз, когда я пытаюсь нажать.

Есть ли альтернатива выполнению git push staging master для этого первоначального гигантского толчка?

Сообщение об ошибке:

EmBP-2:Appname Emma$ git push staging master
Counting objects: 17421, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6363/6363), done.
Connection to 10.10.18.33 closed by remote host.46 KiB/s    
error: pack-objects died of signal 13
error: failed to push some refs to 'git@heroku.com:appname-staging.git'

/////////////////// SOLUTION / EDIT, много месяцев спустя ...

В настоящее время существует хитрый способ решения этой проблемы с использованием (экспериментальной) функции конвейера Heroku, если у вас уже есть среда, в которую вы добавили код.Из Heroku docs :

"Например, вы можете подтолкнуть код к постановке, встроить его в слаг и затем продвигать слаг постановки в производство."

Heroku занимает около 5 секунд, чтобы перенести существующий слаг из одного приложения в другое!

Ответы [ 4 ]

8 голосов
/ 05 августа 2013

Я пытался внести некоторые изменения в видео и получил:

fatal: The remote end hung up unexpectedly
error: pack-objects died of signal 13
error: failed to push some refs to 'git@github.xxxx/XXX.git'

Решение для меня было:

git repack
git push 

Надеюсь, это поможет

5 голосов
/ 30 декабря 2011

Альтернатива состоит в том, чтобы разбить ваш гигантский коммит на множество маленьких. Отметьте или ответвите, прежде чем сделать это. У каждого будет несколько файлов, которые представляют собой разумный толчок. Сделайте временную ветвь, чтобы указать на подсказку. Теперь сбросьте мастер до первого из этих небольших коммитов. От себя. Установить мастер на следующий коммит. От себя. Повторите это, пока не закончите.

Теперь восстановите мастер в том месте, где он был изначально. Вы уже передали объекты. Нажатие этого большого коммита не должно пересылать все объекты, которые уже существуют на удаленном компьютере.

3 голосов
/ 14 мая 2015

Согласно ответу Адама, вы можете разбить свой большой толчок, содержащий множество коммитов (и их BLOB-объектов), на несколько меньших толчков, каждый из которых содержит подмножество необходимых коммитов для истории вашей ветви.

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

Сначала вам нужно будет определить, насколько агрессивным вы будете с точки зрения количества коммитов для каждого толчка - большее количество коммитов на толчок может быть немного быстрее, но с более высоким риском попадания в ту же проблему. Кроме того, поскольку ваши коммиты будут иметь разные размеры, некоторые периоды в истории могут содержать коммиты с размером, превышающим средний, поэтому некоторые блоки могут быть успешными, тогда как другие требуют дальнейшего разделения. Вы также можете обнаружить, что у вас есть один коммит, который нельзя нажать, и для этого требуется другое решение.

Чтобы перейти в новую удаленную ветку master, запустите

git log --reverse --oneline | sed -n '0~100p' | awk '{print "git push staging "$1":refs/heads/master"}' | while read i; do eval $i; done

Каждое нажатие будет выдвигать следующие 100 коммитов, и ему нужно только выдвигать новые объекты (или их дельты), найденные в этом пакете коммитов. Наконец, вам нужно нажать текущую HEAD, чтобы протолкнуть оставшуюся часть коммитов, и создать окончательную удаленную ветку:

git push staging HEAD:master
0 голосов
/ 30 декабря 2011

Нет, единственный способ загрузить контент на Heroku - это нажать git push.

Из любопытства, насколько велика папка вашего проекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...