Есть ли способ импортировать историю svn в git постфактум?
Вопрос
У меня уже проверено репозиторий svn только для чтения (svn co, а не git svn).Я внес некоторые изменения и зафиксировал их с помощью git, который затем был перенесен на github.
На данный момент у git нет всей истории из svn.Мне было интересно, есть ли способ извлечь и импортировать это на данный момент.
Различные руководства по git-svn показывают, как импортировать чистое репозиторий и перенести историю, но я не могу найти того, которое уже используется.
Решение
Вам, вероятно, придется выполнить импорт SVN в свежий репозиторий git, объединить два репозитория (просто сложите их вместе, возможно, они пожалуются, что они не связаны), а затем rebase внесенные вами изменения в импортированную историю.
Другие советы
Для завершения Thilo's хороший ответ, после того как вы импортировали репозиторий svn в репозиторий git, вы можете добавить этот репозиторий git в свой с помощью скрипта, описанного в слияние в несвязанных ветвях git
#!/bin/bash
set -e
if test -z "$2" -o -n "$3"; then
echo "usage: $0 REPO BRANCHNAME" >&2
exit 1
fi
repo=$1
branch=$2
git fetch "$repo" "$branch"
head=$(git rev-parse HEAD)
fetched=$(git rev-parse FETCH_HEAD)
headref=$(git rev-parse --symbolic-full-name HEAD)
git checkout $fetched .
tree=$(git write-tree)
newhead=$(echo "merged in branch '$branch' from $repo" | git commit-tree $tree -p $head -p $fetched)
git-update-ref $headref $newhead $head
git reset --hard $headref
Другие методы включают в себя:
- попробуйте "простой" способ
git pull REPO BRANCH
- использование git-графтов для восстановления истории слияния svn создав текстовый файл по адресу .git/info/grafts, где каждая строка содержит идентификатор коммита, за которым следуют его родители.Отныне ваш локальный репозиторий будет действовать так, как если бы этот коммит действительно происходил от обоих родителей.