¿Eliminar una rama svn a través de git?


Estoy usando git como scm de elección, pero tengo que usar un svn-repo. Puedo crear una svn-remote-branch como esta:

git svn branch the_branch

Pero ¿cómo puedo eliminar la rama remota?

 59
Author: DerKlops, 2009-12-03

4 answers

Actualmente, no es posible eliminar una rama SVN usando git-svn. Pero es fácil eliminar la rama usando SVN, sin siquiera tener que comprobarlo. Así que simplemente escriba

svn rm $URL/branches/the_branch

Tenga en cuenta que eliminar una rama de Subversion no causa que se elimine del repositorio git-svn. (Esto es intencional, porque eliminar una rama de Subversion no causa ninguna pérdida de información, mientras que eliminar una rama de git hace que su existencia sea olvidada después de la siguiente basura de git colección.) Así que si quieres que la rama SVN remota se elimine de tu repositorio git, tienes que hacerlo manualmente:

git branch -D -r the_branch
rm -rf .git/svn/the_branch

OR
rm -rf .git/svn/refs/remotes/f8745/ (for newer versions)

Para eliminar una rama de git que corresponde a una etiqueta de Subversion, los comandos son ligeramente diferentes:

git branch -D -r tags/the_tag
rm -rf .git/svn/tags/the_tag
 80
Author: mhagger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-19 14:52:06

Esto funcionó bien para mí, gracias. No estoy seguro si mi entorno es simplemente diferente o si esto se cambió en una versión más reciente de git, pero los dirs de la rama svn estaban ubicados en .git / svn / refs / remotes / que fue bastante simple de encontrar de las instrucciones originales, cambiando el comando rm a:

rm -rf .git/svn/refs/remotes/the_branch

No estoy seguro de las etiquetas ya que no las uso mucho.

 6
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-09 18:47:10

Opps, la respuesta principal se escribió en 2009, ahora la forma correcta de eliminar una etiqueta remota es

svn rm svn://dev.in/branches/ios_20130709150855_39721/
git branch -d -r ios_20130709150855_39721
 2
Author: alswl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-15 03:00:17

A partir de 2017, todavía no tenemos git svn branch --delete. (-d la opción está ahí pero es para mystic --destination)

Como se describe en otras respuestas, los pasos manuales son:

  1. Imprimir mensaje de confirmación: git log -1 $commit
  2. En el mensaje de confirmación, localice la línea git-svn-id: $url
  3. Eliminar la rama SVN: svn rm $url

Hice un alias para automatizar estos pasos:

[alias]
    svn-rm-branch = "!f() { if git_svn_id=\"$(git log -1 --format=%B \"$@\" | grep -o '^git-svn-id:[^@]*')\" ; then svn rm --editor-cmd=\"$(git var GIT_EDITOR)\" \"$(echo $git_svn_id | cut -d' ' -f 2)\" ; else echo No git-svn-id in the message of the commit \"$(git rev-parse \"$@\")\" 1>&2; fi }; f"
 0
Author: snipsnipsnip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-30 06:36:13