Альтернативный способ сделать начальный толчок большого репо

У меня есть довольно большое приложение 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 '[email protected]:appname-staging.git'

/////////////////// РЕШЕНИЕ/РЕДАКТИРОВАТЬ, много месяцев спустя...

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

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

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

Ответ 1

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

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

Ответ 2

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

fatal: The remote end hung up unexpectedly
error: pack-objects died of signal 13
error: failed to push some refs to '[email protected]/XXX.git'

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

git repack
git push 

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

Ответ 3

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

Ранее я делал это, разбивая полный набор коммитов в блоках, используя временные ветки или теги, но мои последующие попытки используют встроенный script ниже. Мне не нужно перемещать 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

Ответ 4

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

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