Разделение на поддеревья с фиксацией пустого идентификатора; или удаление коммита без перебазирования: необычный вариант использования

У меня очень большой репозиторий с одной веткой. Его рабочее дерево постоянно обновляется (каждые несколько секунд) и фиксируется (каждые несколько минут).

Моя настоящая цель здесь - бежать git subtree split для определенного каталога и обрезать большую часть хранилища после перемещения этого каталога в место сохранения. (См. Раздел " Отсоединение (перемещение) подкаталога в отдельный репозиторий Git") Однако это не удается, потому что один из коммитов имеет пустой ident,

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

Учитывая (мое понимание) способ представления коммитов внутренне, я думаю, что было бы просто исключить коммит из истории и переключить ссылки соседних коммитов. Хотя, я думаю, что это должно быть еще проще subtree split работать с коммитом, который имеет пустой ident..

РЕДАКТИРОВАТЬ

Хорошо, я недавно понял, что я могу использовать git replace --edit <ref> изменить идентификатор на соответствующем коммите. Тем не менее, я также понял, что последние 1000 коммитов имеют пустые идентификаторы. Должен ли я написать скрипт, чтобы изменить их все, или может subtree split просто обойти это?

РЕДАКТИРОВАТЬ

Итак, мне удалось изменить все имена авторов / коммиттеров и электронные письма, используя filter-branch --env-filter, а затем создал трансплантат и успешно отключил старые коммиты, как описано в связанном вопросе. Тем не менее, мой репозиторий по-прежнему имеет тот же размер - как мне удалить дополнительное пространство, занимаемое старыми коммитами?

РЕДАКТИРОВАТЬ

Я пробовал несколько методов, найденных на SO и в других местах.

  • git gc --aggressive --prune=now не удается с
ошибка: не удалось прочитать 2cbe0846930116a0eff259abbf2caab74737b379                                                
Неустранимый: не удалось перебрать родителей коммитов cc7349dcde96404a767afaf07da3186c7f31e540                            
ошибка: не удалось запустить repack
  • git prune успешно, но не сильно уменьшает размер хранилища. (От 230 до 205 г)
  • git update-ref -d на двух хешах в вышеприведенной ошибке не решает проблему
  • Что касается отрасли, которую я хочу сохранить, я не могу bundle или же pull откуда-то из-за ограничений памяти. В противном случае я бы просто сделал это и удалил этот репозиторий.
  • git fsck дает следующее:
ошибка в коммите c9ce63c35025b0cc7396144f4f070b9b0f56fb19: недопустимая строка автора / коммиттера - отсутствует пробел перед отправкой электронной почты Проверка каталогов объектов: 100% (256/256), сделано. Проверка объектов: 100% (11760/11760), сделано. Проверка подключения: 163203, сделано. оборванных совершают 6b3b3062c0df601c8e186400d7a8fc1bf67d28b9 оборванных совершают a451609287a38162c70f42aeab8a0a84bb2d72dd оборванного совершают 13bdd914dcf58dfd6565415884d03b6d8a69b6d5 оборванными совершают d8137a92199ca75bb6098d28f20a6f52dfb33b7b оборванных фиксацию 6ca49a78de5fb4dd381c210e28c23e5600470042 свисающих совершают 703c6b102f9398897db6b82a0eea57440f979e1f оборванными совершают 0f15744cc9dd1751dc38d3045113cf53c9936058 оборванными совершают 2e209c2f159766adf143d0b9a50717977d20df3f оборванного совершают 6b8d3538efa1b5714f33ee95a5aa953dfd0a7b0a оборванным совершает 9cdcc59c28d4b60ed82dd20eae1466e959f9aaac оборванное совершают 41f68584ab5c5bc8e97dd1951fff8465d5b3c46c оборванным совершают d30be628e980388a653672cc6fed916d55a4d954 свисающего совершают a4b2dee6464c245fe2b1d22dd51e5da92bd395dd оборванными совершают 5a0b5f30eabe447ed5c7b29685145c716be79d97 свисающего совершают 401daf96420733905dd281cca3b127f11924d97b оборванными совершают c184571e9bdb0792143a2fa976c966fc60e92280

По сути, мне нужен способ обрезать то, что осталось от коммитов, которые я уничтожил graft а также filter-branch, На самом деле, мой приоритет - просто сохранить вышеупомянутую другую ветку И рабочий каталог нетронутым. Я в порядке с уничтожением всего остального, если это необходимо.

0 ответов

Другие вопросы по тегам