2009-03-10 11 views
6

Ya tengo un svn read only repo check out (svn co y no git svn). Realicé algunos cambios y me comprometí a usar git, que luego se envía a github.¿Hay alguna manera de importar la historia de svn en git después del hecho?

En este punto, git no tiene todo el historial de svn. Me preguntaba si había una forma de extraer e importar esto en este punto.

Las diversas guías de git-svn muestran cómo importar un repositorio limpio y transferir el historial pero no uno que pueda encontrar que ya está en uso.

Respuesta

5

Probablemente tengas que hacer una importación de svn en un nuevo repositorio de git, fusionar los dos repositorios (simplemente agrégalos juntos, probablemente se quejará de que no están relacionados) y luego rebase los cambios realizados en el historial importado.

8

Para completar Thilo 's good answer, una vez que haya importado el repositorio SVN en uno git, se puede añadir que repositorio git en el suyo con una secuencia de comandos que se detallan en 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 

Otros métodos incluye :

  • probar un "simple" git pull REPO BRANCH
  • using git grafts to restore svn merge history creando un archivo de texto en .git/info/injertos, donde cada línea contiene un ID de confirmación seguido de sus padres. Su repositorio local actuará como si ese compromiso realmente descendiera de ambos padres.
Cuestiones relacionadas