C'è un modo per importare la storia svn in git dopo il fatto?
Domanda
Ho già un repository di sola lettura svn estratto (svn co e non git svn). Ho apportato alcune modifiche e mi impegno a utilizzare git che viene quindi trasferito su github.
A questo punto, git non ha tutta la cronologia di svn. Mi chiedevo se ci fosse un modo per estrarre e importare questo a questo punto.
Le varie guide di git-svn mostrano come importare un repository pulito e trasferire la cronologia ma non quella che trovo già in uso.
Soluzione
Probabilmente dovrai eseguire un'importazione svn in un nuovo repository git, unire i due repository (basta aggiungerli insieme, probabilmente si lamenterà che non sono correlati) e quindi rebase le modifiche apportate alla cronologia importata.
Altri suggerimenti
Per completare Thilo di buona risposta , una volta importato il repository svn in uno git, tu può aggiungere quel repository git al tuo con uno script come descritto in fusione in rami git non correlati
#!/bin/bash
set -e
if test -z "$2" -o -n "$3"; then
echo "usage: <*> 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 includono:
- prova un " semplice "
git pull REPO BRANCH
- utilizzando git innesti per ripristinare la cronologia di svn merge creando un file di testo in .git / info / innesti, dove ogni riga contiene un ID di commit seguito dai suoi genitori. D'ora in poi il tuo repository locale agirà come se quell'impegno discendesse effettivamente da entrambi i genitori.