2009-01-31 12 views
39

Motivi per fare questo a parte, c'è un modo ragionevole per convertire un intero repository git in subversion?Conversione di un repository da git a subversion

posso trovare solo tonnellate di informazioni sulla migrazione da sovversione - git, e lo scambio di modifiche tra i due, ma non per fare una semplice conversione di tutta la repository git a SVN.

+1

Duplicato qui: http://stackoverflow.com/questions/661018/pushing-an-existing-git-repository-to-svn/1056817#1056817 – cmcginty

+15

Triste che dovevi prefazione con "Motivi per fare questo da parte" al fine di prevenire una guerra di fiamme o simili ... –

risposta

14

Il problema generale con le conversioni in questa direzione è che i repository Git possono contenere più di una semplice cronologia di revisioni, come previsto da Subversion. Sono possibili più antenati con storie divergenti e frequenti commit di unione, che non possono essere facilmente rappresentati in un repository di Subversion.

Per i casi semplici in cui si dispone di una cronologia lineare nel repository Git, è possibile utilizzare git-svn dcommit per spingere il lotto su un repository Subversion altrimenti vuoto.

+2

Scusa se non riesco a risollevarlo dopo alcuni anni, ma puoi dare un esempio concreto di come farlo? Supponiamo di avere un clone di un repository git su ~/my-git-repo e voglio copiare la cronologia del commit in qualche repository SVN, ad esempio svn: //foo.com/empty-svn-repo/ –

+1

@SchighSchagh: Dai un'occhiata a questa domanda recente, potrebbe essere più adatto a ciò di cui hai bisogno: [possibile ricreare il repository svn da (completo) git-svn clone?] (Http://stackoverflow.com/questions/13284762/possible-to -recreate-svn-repository-from-full-git-svn-clone) –

6

È molto facile da eseguire con SubGit.

$ svnadmin create svn.repo 
$ subgit configure svn.repo 
$ nano svn.repo/conf/subgit.conf to specify a path to your bare repository (you may use "git clone --bare <URL>" if you have none locally) 
$ subgit install svn.repo 

Dopo la conversione tua SVN e Git repository collegati saranno sincronizzati: ogni pressione Git sarà tradotto a SVN commit e viceversa. Per rompere run traduzione

$ subgit uninstall svn.repo 

Mentre traduzione SubGit cercherà di preservare commettere date, tag, ignora, si fonde, EOLs, rami e così via, in quanto è possibile. Non posso dire lo stesso del repository git-svn.

+0

Questo non funziona. Vedere https://stackoverflow.com/a/11084905/785194 per una soluzione di lavoro in subgit. – EML