Как клонировать проект seed/kick-start без всей истории?
Обратите внимание, что с помощью --depth=1
Параметр не позволяет перенести проект в новый репозиторий.
подробности см.: "Удаленный отклонен" (мелкое обновление не разрешено) после изменения удаленного URL Git
3 ответа
Вы можете сделать
git clone <git_url>
удалите репозиторий.git из вашей папки. Который удалит всю вашу историю.
Вы можете сделать
git init
который создаст совершенно новый проект для вас.
Это не может быть лучшим способом. Но это будет работать. Надеюсь, поможет.
Пока вы считаете, что полная потеря истории не является проблемой, подход, предложенный Аджаем, вполне оправдан. Но если вы хотите сохранить историю вашего мелкого клона, у меня есть другое предложение.
Мелкий клон притворяется, что имеет полную историю, используя так называемую точку пересадки, чтобы подделать родителя "первого" коммита.
Если мы предположим, что у нас есть полная доступная история, мы могли бы перефразировать вопрос: как я могу выбросить историю перед конкретной ревизией?
Это означает, что мы можем использовать комбинацию точки пересадки и git filter-branch
(как предложено в связанном вопросе). Однако вы должны заметить, что это перезапишет всю вашу историю, сделав новую несовместимой с удаленным, с которого мы изначально клонировали. В связи с этим мы должны удалить старый пульт из нашего хранилища.
git remote remove <old-remote-name>
Теперь мы можем начать нашу переписать. Давайте предположим, что мы хотим, чтобы текущиймастер зафиксировал новый корень для хранилища.
git rev-parse --verify master >> .git/info/grafts
git filter-branch -- --all
Это перезапишет всю историю нашего репозитория с текущим основным коммитом в качестве нового корня. Вы можете завершить перезапись, удалив "резервные" ссылки вrefs/original
, Кроме того, теперь вы можете удалить.git/shallow
файл.
После того, как вы это сделаете, вы сможетеперенести историю, которая сейчас не установлена, на ваш новый пульт.
Попробуйте что-то вроде этого:
mkdir -p /tmp/git-copy
cd /tmp/git-copy
# create another copy of your repository
git clone file:///path/to/cloned/repo
cd repo
git rebase -i (first-commit)
# in vim:
# :2,$s/^pick/squash
# :w
# Now wait, it will take a while...
git push --mirror git@github.com:username/new-repo.git
Я попробовал это только сейчас в этом хранилище. Кажется, работает - нет истории и все подмодули не повреждены.