Faltan tags después de la conversión de SVN a Git

Estoy tratando de convertir un repository de Subversion en un repository de Git usando los siguientes commands .:

git svn clone URL_TO_SVN/PROJECT --authors-file=users.txt -T trunk -b branches -t tags/release 

Lo único que difiere del layout estándar de SVN es que las tags SVN se almacenan bajo tags/release .

Después de mover las tags SVN para que sean tags Git correctas :

 cp -Rf .git/refs/remotes/origin/tags/release/* .git/refs/tags/ rm -Rf .git/refs/remotes/origin/tags 

Solo recibo algunas tags, pero no todas las tags SVN ahora son tags Git.

En el repository SVN hay tags desde la versión 0.1 hasta la 0.35.2, pero en el repository Git solo tengo las tags 0.33.10, 0.34.0, 0.34.1, 0.34.2, 0.35.0, 0.35.1, 0.35 .2.

¿Cómo puedo convertir todas las tags SVN a tags Git?

Copié el código de la networking, pero la URL original ya no es válida. Aquí está el código:

 # Convert branches and tags git for-each-ref --format="%(refname:short)" refs/remotes/svn | sed 's#svn/##' | grep -v '^tags' | while read aBranch; do git branch $aBranch svn/$aBranch || exit 1; done git for-each-ref --format="%(refname:short)" refs/remotes/svn/tags/ | while read tag; do GIT_COMMITTER_DATE="`git log -1 --pretty=format:\"%ad\" \"$tag\"`" \ GIT_COMMITTER_EMAIL="`git log -1 --pretty=format:\"%ce\" \"$tag\"`" \ GIT_COMMITTER_NAME="`git log -1 --pretty=format:\"%cn\" \"$tag\"`" \ git tag -a -m "`git for-each-ref --format=\"%(contents)\" \"$tag\"`" \ "`echo \"$tag\" | sed 's#svn/tags/##'`" "$tag" || exit 1 done 

Es parte de mi script git2svn .

Supongo que su repository estaba lleno y, por lo tanto, algunas references ya estaban en los files del package y, por lo tanto, no puede usar simplemente cp o rm en ellas.

Pero de todos modos, para una migration única, git-svn no es la herramienta adecuada para conversiones de repositorys o partes de repositorys. Es una gran herramienta si quieres usar Git como frontend para un server SVN existente, pero para las conversiones svn2git no debes usar git-svn , pero svn2git es mucho más adecuado para este caso de uso.

Hay muchas herramientas llamadas svn2git , la mejor probablemente sea la de KDE de https://github.com/svn-all-fast-export/svn2git . Recomiendo usar esa herramienta svn2git . Es lo mejor que sé disponible por ahí y es muy flexible en lo que puedes hacer con sus files de reglas.

Podrá configurar svn2git el file de reglas de svn2git para producir el resultado que desea de su layout SVN actual, incluidos los historiales complejos que puedan existir, incluyendo la producción de varios repositorys Git de un repository SVN o la combinación de diferentes repositorys SVN en un repo de Git limpiamente.

Si no está al 100% sobre el historial de su repository, svneverever de http://blog.hartwork.org/?p=763 es una gran herramienta para investigar el historial de un repository SVN al migrarlo a Git.


Aunque es más fácil comenzar con git-svn , aquí hay algunas razones más por las que el uso de KDE svn2git lugar de git-svn es superior, además de su flexibilidad:

  • la historia se reconstruye mucho mejor y más limpia por svn2git (si se usa la correcta), este es especialmente el caso para historias más complejas con twigs y fusiones, etc.
  • las tags son tags reales y no sucursales en Git
  • con git-svn las tags contienen un compromiso vacío adicional que también hace que no --tags parte de las twigs, por lo que una fetch normal no las obtendrá hasta que proporciones --tags al command, ya que de manera pnetworkingeterminada solo se --tags las tags que apuntan a las twigs obtenidas . Con las tags adecuadas svn2git es donde pertenecen
  • si cambiaste el layout en SVN puedes configurarlo fácilmente con svn2git , con git-svn svn2git historia eventualmente
  • con svn2git también puede dividir un repository SVN en múltiples repositorys Git fácilmente
  • o combine múltiples repositorys SVN en la misma raíz SVN en un repository Git fácilmente
  • la conversión es un billón de veces más rápida con el svn2git correcto que con git-svn

Verá, hay muchas razones por las cuales git-svn es peor y el KDE svn2git es superior. 🙂