Есть ли способ импортировать историю SVN в GIT по факту? - PullRequest
7 голосов
/ 10 марта 2009

У меня уже есть репозиторий svn только для чтения (svn co, а не git svn). Я сделал некоторые изменения и зафиксировал, используя git, который затем отправляется в github.

На данный момент у git нет всей истории svn. Мне было интересно, есть ли способ извлечь и импортировать это на этом этапе.

Различные руководства git-svn показывают, как импортировать чистое репо и перенести историю, но не ту, которую я могу найти, которая уже используется.

Ответы [ 2 ]

8 голосов
/ 10 марта 2009

Чтобы завершить Thilo хороший ответ , как только вы импортируете репозиторий 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 grafts для восстановления истории слияния svn путем создания текстового файла в .git / info / grafts, где каждая строка содержит идентификатор фиксации, за которым следуют его родители. Ваш локальный репозиторий отныне будет действовать так, как если бы этот коммит фактически происходил от обоих родителей.
6 голосов
/ 10 марта 2009

Вам, вероятно, придется выполнить импорт SVN в свежий репозиторий git, объединить два репозитория (просто сложите их вместе, он, вероятно, пожалуется на их несвязанность), а затем rebase внесенные вами изменения в импортированную историю.

...