Existe uma maneira de importar história svn para git após o fato?
Pergunta
Eu já tenho um svn somente leitura repo check-out (svn co svn e não git). Eu fiz algumas mudanças e commits usando git que é então empurrado até github.
Neste ponto, git não tem toda a história a partir do SVN. Eu queria saber se havia uma maneira de extrair e importar este neste momento.
As várias guias git-svn mostrar como importar um repo limpo e transferir a história, mas não um que eu posso achar que já está em uso.
Solução
Você provavelmente vai ter que fazer uma importação SVN em um repositório git fresco, mesclar os dois repositórios (basta adicioná-los juntos, ele provavelmente vai reclamar sobre eles estarem alheios) e, em seguida, rebase as alterações feitas até a história importado.
Outras dicas
Para completar Thilo 's boa resposta , depois de ter importado o svn repo em um git, você pode adicionar o repositório git em seu com um script conforme detalhado na fundindo em ramos git não relacionados
#!/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
Outros métodos incluem:
- tentar um "simples"
git pull REPO BRANCH
- utilizando enxertos git para restaurar história merge svn através da criação de um arquivo de texto em .git / info / enxertos, onde cada linha contém um cometa ID seguido por seus pais. Seu repositório local passarão a agir como se que cometem realmente descendentes de ambos os pais.