Come migrare da un repository di sovversione complicato a un sistema di controllo di versione distribuito?
Domanda
Supponiamo di avere un repository di sovversione che assomiglia a
/original/0.1
/original/0.2
/variantA/trunk
/variantA/branches/who/branch_for_xxx
/variantA/branches/she/branch_for_yyy
/variantB/trunk
/variantB/branches/who/branch_for_zzz
(... 30 or 40 alike)
dove variantA e variantB sono fork del software originale.
Sto cercando un metodo per migrare questo repository in un sistema di controllo di versione distribuito: un metodo
- non necessariamente emette un singolo comando
- per uno qualsiasi dei noti sistemi di controllo della versione distribuita
- facendo pensare ai dvc di loro rami: /official/{0.1,0.2} alberi, / varianteA / tronco tree, ...
- rendendo i DVC consapevoli della relazione di eredità di quegli alberi
Soluzione
Se consideri Git come possibile candidato DVCS, lo script ruby svn2git fa ciò di cui hai bisogno.
Maggiori dettagli nella domanda: < strong> Clonazione di un repository Svn non standard con Git-Svn
Altri suggerimenti
Mercurial viene fornito con un'estensione di conversione che dovrebbe fare ciò che desideri. Guarda i converti i dettagli dell'estensione sul sito web Mercurial.
Per Git, consultare le istruzioni in http://github.com/guides/import- da-subversion
L'ultima volta che l'ho fatto manualmente, ho usato i seguenti comandi. (Questo era per un progetto che non utilizzava tag o rami. L'uso di svn2git potrebbe produrre risultati migliori di git-svn se hai tag o rami.)
cat "mysvnusername = Me Myself <me.myself@somewhere.com>" >> authors.txt
svnserve --daemon --foreground --root <SVN-REPO-PARENT-DIR>
git svn clone --stdlayout --authors-file=authors.txt --no-metadata svn://localhost/<SVN-REPO-NAME>
# push to a public repo and clone from there, to get push/pull working easily
cd <SVN-REPO-NAME>
git remote add origin git@github.com:mygithubusername/<GIT-REPO-NAME>.git
git push origin master
cd ..
rm -rf <SVN-REPO-NAME>
git clone git@github.com:mygithubusername/<GIT-REPO-NAME>.git
Ma poiché hai un layout di repository SVN non standard, dovrai specificare i parametri --trunk, --tags e --branches invece di --stdlayout per git svn clone .
Per rappresentare l'intera cronologia delle eredità del repository, è possibile provare a riordinare il repository in modo che invece di una gerarchia non standard si disponga di un layout di repository piatto standard:
/branches/original-0.1
/branches/original-0.2
/branches/variantA-trunk
/branches/variantA-who-branch_for_xxx
/branches/variantA-she-branch_for_yyy
/branches/variantB-trunk
/branches/variantB-who-branch_for_zzz
...
Ciò dovrebbe facilitare agli strumenti di importazione la comprensione del repository. Quindi, una volta importati, è possibile riorganizzarli meglio all'interno del nuovo repository.
Inoltre, ho sentito che Git 1.6.x supporta la clonazione profonda, in modo da poter dare a git svn clone
parametri come --branches = rami / * / *
che esaminerà in profondità la gerarchia dei rami. Vedi questo post per un esempio di usarlo.
$ bzr svn-import --layout trunk1 svn-root-url bzr.repo
Dovrebbe fare la cosa giusta. Devi avere installato il plugin bzr-svn per poterlo fare.