Git: Удаление объектов, связанных со старым коммитом - PullRequest
0 голосов
/ 10 июня 2010

Пару месяцев назад я добавил и передал архив релиза в репозиторий git-кода. Через пару коммитов я удалил файл и зафиксировал удаление. Этот файл был почти в 10 раз больше всего хранилища, поэтому наличие этого файла в .git значительно замедляет клонирование. На данный момент было несколько коммитов с тех пор, как пара коммитов добавила и удалила файл.

Есть ли способ удалить две фиксации, которые отменяют (добавление и удаление), а также удалить копию файла в .git, не теряя хранилище?

Спасибо ..

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Вы можете сделать git rebase и записать коммиты из истории - хотя это изменит идентификаторы всех коммитов после этого. Обойти это невозможно, это по замыслу.

Скажем, коммит, в который вы добавили тарбол, был мастером ~ 100. Если вы сделаете git rebase -i master~101 на master, то вам будет представлен список коммитов для просмотра и редактирования. Вы можете просто извлечь коммиты, которые добавили и удалили его, или переместить отменяющий коммит на место рядом с первым и пометить его как «сквош»: это заставит git объединить два, и он должен выяснить, что результат равен нулю (но справится, если два точно не отменится, поэтому этот подход немного безопаснее).

0 голосов
/ 10 июня 2010

Взгляните на git filter-branch.Это то, что лучший инструмент для переписывания истории.Страница man имеет несколько хороших примеров.

Если другие используют репозиторий, убедитесь, что они понимают, что получат основную ветку, исключающую их последние коммиты.Теперь они должны перейти к чему-то вроде temp и выполнить git fetch.

Теперь они могут использовать Gitk - все, чтобы точно определить, где была дивергенция, и перебазироваться, чтобы вернуться в синхронизацию с измененными SHA-1коммиты, которые следовали за коммитом, который имел гигантский файл.

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