2009-12-03 10 views

Respuesta

78

Actualmente, no es posible eliminar una rama SVN usando git-svn. Pero es fácil eliminar la rama usando SVN, sin siquiera tener que verificarlo. Por lo tanto, simplemente escriba

svn rm $URL/branches/the_branch 

Tenga en cuenta que la supresión de una rama de Subversion no causa que sea eliminado del repositorio git-svn. (Esto es intencional, porque eliminar una rama de Subversion no causa ninguna pérdida de información, mientras que al eliminar una rama de git se olvida su existencia después de la siguiente recolección de elementos basura de git). Por lo tanto, si desea eliminar la rama SVN remota de su git repositorio, hay que hacerlo de forma manual:

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 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 
+1

Como Stephen C especula con otra respuesta, la estructura exacta del árbol en .git/svn depende de cómo configure su configuración de git-svn. Dicho esto, para las configuraciones más comunes, no debería ser difícil encontrar los subdirectorios adecuados para eliminar. – ipmcc

+1

no 'git gc' o' git svn gc' detectar y eliminar los archivos correctos sin que el usuario tenga que adivinar? –

+1

Ben: los comandos "rm -rf" eliminan los metadatos git-svn para la rama. Esta información no se limpia con "git gc" o "git svn gc". – mhagger

6

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

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

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

+0

Eso solo lo elimina de su vista local. Cualquier otra persona que use el repositorio SVN seguirá viéndolo. – phyzome

+0

@phyzome, esto era un apéndice a la respuesta aceptada de mhagger, que muestra cómo eliminar la rama svn. No puedo creer que hayas votado negativamente por eso. –

+0

Ah, ya veo eso. Esto realmente debería ser un comentario sobre la respuesta de mhagger, por cierto, en lugar de una respuesta de alto nivel. – phyzome

2

Opps, la respuesta más común fue escrito en 2009, ahora la forma correcta de eliminar una etiqueta a distancia está

svn rm svn://dev.in/branches/ios_20130709150855_39721/ 
git branch -d -r ios_20130709150855_39721 
+1

Eso no es diferente de la respuesta principal, aparte de que está utilizando -d en lugar de -D, que es no forzar la eliminación. –

+0

@JeffSchumacher ha actualizado la respuesta recientemente. – alswl

0

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

Como se describe en otras respuestas, pasos manuales son:

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

hice un alias para automatizar estos pasos:

[alias] 
    svn-rm-branch = "!f() { if git_svn_id=\"$(git log -1 --format=%B \"[email protected]\" | 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 \"[email protected]\")\" 1>&2; fi }; f" 
Cuestiones relacionadas