Come migrare da un repository di sovversione complicato a un sistema di controllo di versione distribuito?

StackOverflow https://stackoverflow.com/questions/839683

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
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top