2009-03-10 4 views
6

Ich habe bereits eine SVN lesen nur Repo ausgecheckt (Svn co und nicht git svn). Ich habe einige Änderungen vorgenommen und Commits mit Git gemacht, die dann auf GitHub geschoben wird.Gibt es eine Möglichkeit, SVN Geschichte in Git nach der Tat zu importieren?

An diesem Punkt hat Git nicht die ganze Geschichte von Svn. Ich habe mich gefragt, ob es an dieser Stelle einen Weg gibt, diese zu extrahieren und zu importieren.

Die verschiedenen git-svn Guides zeigen, wie man einen sauberen Repo importiert und den Verlauf überträgt, aber nicht einen, den ich finden kann, der bereits benutzt wird.

Antwort

5

Sie werden wahrscheinlich einen SVN-Import in ein neues Git-Repository durchführen müssen, die beiden Repositories zusammenführen (fügen Sie sie einfach zusammen, wird sich wahrscheinlich darüber beschweren) und dann die Änderungen, die Sie an der importierten Historie vorgenommen haben.

8

Zur Vervollständigung Thilo ‚s good answer, sobald Sie die SVN-Repo in einem git ein importiert haben, können Sie diese git-Repository in Ihr mit einem Skript in wie detailliert enthält merging in unrelated git branches

#!/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 

Andere Methoden hinzufügen :

  • versuchen, eine "einfache" git pull REPO BRANCH
  • using git grafts to restore svn merge history durch Erstellen einer Textdatei unter .git/info/grafts, wobei jede Zeile eine Commit-ID gefolgt von ihren Eltern enthält. Ihr lokales Repository wird fortan so tun, als ob dieses Commit tatsächlich von beiden Eltern stammt.
Verwandte Themen