Конвертировать мелкий репо в нормальный репо
Я "отмел" репо:
FIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"
git rev-parse ${FIRST_COMMIT} > .git/shallow
git fsck --unreachable
git gc --prune=now
Сейчас я пытаюсь нажать:
! [remote rejected] develop -> develop (shallow update not allowed)
Я понимаю, что это ограничение связано с тем, что репо мелкое.
Как я могу преобразовать мелкое репо в обычное репо?
Мне плевать на потерю старой истории. На самом деле, я хочу потерять старую историю
Чтобы уточнить это:
- Я хочу, чтобы преобразованный репо сохранял историю коммитов с метаданными (дата, автор, сообщение коммита, ...) поверхностного репо
- Я хочу полностью потерять старую историю
- Меня не волнует совместимость с исходным репо: это следует считать новым репо
- Мне все равно, если коммиты воссоздаются, просто метаданные сохраняются.
РЕДАКТИРОВАТЬ
Просто удаляя .git/shallow
файл не работает:
» git push -f --set-upstream myorigin develop
error: Could not read d18d4a247bebd32a3b57b2c0e5f9c28749083211
fatal: revision walk setup failed
error: remote unpack failed: eof before pack header was fully read
error: failed to push some refs to 'git@somehost:repos/somerepo.git'
EDIT2
Попытка отменить с fetch
:
git fetch --unshallow
Все еще оставляет grafted
Сделки рЕПО:
commit bf450342272a94117d78eae34a140a2a39359dad (grafted)
Author: The author
Date: Thu Nov 29 16:55:05 2018 +0100
Chages by pre-commit hook (!?)
1 ответ
Из "Как преобразовать неглубокий клон Git в полный клон":
Следующая команда (git версии 1.8.3) преобразует неглубокий клон в обычный:
git fetch --unshallow
Затем, чтобы получить доступ ко всем веткам в origin (спасибо @Peter в комментариях)
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
Уже есть подобный (идентичный?) Вопрос с очень хорошим ответом, который также решает мою проблему.
В основном мне нужно сделать следующее:
git rev-parse --verify bf450342272a94117d78eae34a140a2a39359dad > .git/info/grafts
git filter-branch -f -- --all
Это перезапишет историю с указанным коммитом в качестве нового корня. Метаданные фиксации не будут затронуты (дата, владелец, ...), только хэш фиксации и ссылки между фиксациями, так что новый граф начинается с указанного корня.
Потом будет репо unshallowed
/ ungrafted
и может быть нормально передан на новые пульты с уменьшенной историей.