2009-03-10 7 views
6

Ho già un repository svn read solo verificato (svn co e non git svn). Ho apportato alcune modifiche e ho commesso l'uso di git, che è poi passato a github.C'è un modo per importare la storia di svn in git dopo il fatto?

A questo punto, git non ha tutta la cronologia da svn. Mi stavo chiedendo se ci fosse un modo per estrarlo e importarlo a questo punto.

Le varie guide git-svn mostrano come importare un repository pulito e trasferire la cronologia ma non quella che posso trovare che è già in uso.

risposta

5

Probabilmente dovrai importare una svn in un nuovo repository git, unire i due repository (basta aggiungerli insieme, probabilmente si lamenteranno che non sono collegati) e quindi rebase le modifiche apportate alla cronologia importata.

8

Per completare Thilo s' good answer, una volta che avete importato il repo svn in uno Git si può aggiungere che repository git in yours con uno script come dettagliato nel 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 

Altri metodi include :

  • provare un "semplice" git pull REPO BRANCH
  • using git grafts to restore svn merge history creando un file di testo su .git/info/grafts, dove ogni riga contiene un id di commit seguito dai suoi genitori. Il tuo repository locale d'ora in poi agirà come se il commit effettivamente discendesse da entrambi i genitori.