¿Cómo convierto un svn repo a git utilizando reposurgeon?

¿Puedes dar un ejemplo, cómo agrego la ruta a mi viejo svn y creo una carpeta git a partir de él, que contiene el historial completo y todas las twigs / tags?

Encontré este sitio ¿vale la pena intentarlo? Utiliza svnpull , que no está en mi sistema, ¿puedo usar repopuller en repopuller lugar?

Instalé el repository con

 apt-get install --no-install-recommends xmlto asciidoc unp wget http://www.catb.org/~esr/reposurgeon/reposurgeon-3.7.tar.gz unp reposurgeon-3.7.tar.gz cd reposurgeon-3.7 make make install 

(Me gustaría instalar sin las recomendaciones, porque eso sería aproximadamente 700 MB no necesarios aquí)

Parece que el sitio está un poco desactualizado.

svnpull es reemplazado por repopuller por ahora. Y tampoco lo necesitas si estás en el mismo server.

Adapte el guion:

 nano /usr/local/sbin/reposurgeon-convert-svn2git 

y entró:

 #!/bin/bash PROJECT=myproject svnrepo=svn+ssh://[email protected]/var/svn-repos/$PROJECT # or something like svnrepo=https://svn.origo.ethz.ch/$PROJECT gitrepo=/tmp/$PROJECT-git cd /tmp # start over with: #rm $PROJECT-mirror/ $PROJECT-git/ -Rf echo echo pull/copy the repository... #repopuller $svnrepo # or copy it if it is on the same server: cp -av /var/svn-repos/$PROJECT /tmp/$PROJECT-mirror echo echo start conversion... reposurgeon <<EOF read /tmp/$PROJECT-mirror prefer git edit references lift rebuild $gitrepo EOF echo ...finished # now filter out all falsly generated .gitignore files: cd $gitrepo/ git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch $(find . -name .gitignore|xargs )" \ --prune-empty --tag-name-filter cat -- --all 

Filtrado los files .gitignore como github ha documentado con filter-branch porque de lo contrario, crearán commits en todas las tags (ver nota a continuación). Tienes que crear un nuevo file .gitignore cuando hayas terminado.

Esto puede tardar un time, por lo que debe iniciarlo dentro de tmux o screen con

 tmux bash /usr/local/sbin/reposurgeon-convert-svn2git 

Tenga cuidado de que todas sus tags sean conformes.

Obtuve el error

 reposurgeon% reposurgeon: exporting...fatal: Branch name doesn't conform to GIT standards: refs/tags/version 3.6.2 

Así que limpié el repository svn y eliminé esta twig, por lo que todas las tags y twigs son conformes:

 svn rm "$svnrepo/tags/version 3.6.2" 

y lo borré de todo el historial con este script: ¿cómo elimino completamente una label SVN que contiene espacios?

Luego comencé de nuevo con el guión:

 rm $PROJECT-mirror/ $PROJECT-git/ -Rf bash /usr/local/sbin/reposurgeon-convert-svn2git 

Nota:
Sin eliminar los files .gitignore , se ve igual en git que en SVN antes, excepto una cosa : todas las tags se orderan en el logging en la date exacta en que se labelron, en lugar de la confirmación que iniciaron. Parece que se agrega un file .gitignore allí en el process de conversión a cada twig y label, pero ese file .gitignore da como resultado una confirmación dentro de esas tags con la timestamp de la creación de label.
Las nuevas tags están bien, aparecen justo en la revisión a la que pertenecen. (ver ¿ Convertir un repository SVN a git con repository sin crear files .gitignore? )

    Intereting Posts