2010-06-30 7 views
12

edit La pregunta se reduce a "¿Se puede dar instrucciones a git rebase para volver a establecer las etiquetas también?" Pero una respuesta a la pregunta original también ayudaría.¿Las etiquetas se pueden mover automáticamente después de una rama de filtro git y rebase?


Preguntar How to prepend the past to a git repository? que siguieron these instructions. < editar> Luego volví a configurar para incluir un archivo que solo estaba en las instantáneas, vea here. < /edit> Desde que se reescribió la historia (por git filter-branch o git rebase o ambas?) Todas las etiquetas todavía están en la línea de tiempo original * y de alguna manera me gustaría moverlas a la nueva. Creo que hice todos los mensajes de confirmación con etiquetas únicas para poder escribir un script que los use, pero un git move-tags <from> <to> más general sería mejor.

Entonces, ¿hay alguna forma de abordar "la confirmación que es N confirma después en la nueva línea de tiempo de modo que la enésima confirmación después de la línea de tiempo anterior está etiquetada"? Cualquier otra solución, excepto la reutilización manual obvia, también sería excelente.

(no dude en corregir esa horriblemente larga condena en la llanura Inglés ...)

*) bueno, git resolvió el abuelo paradoja!

+2

El título dice “rebase”, pero las conversaciones sobre el cuerpo “filter-branch”, hiciste tanto (como se insinuó [aquí] (http://stackoverflow.com/ preguntas/3150394/cómo-recuperar-un-archivo-previamente-eliminado-en-gits-history/3150528 # 3150528))? Con '--tag-name-filter', filter-branch puede reescribir las etiquetas, pero esto no ayudará si hay una subsiguiente rebase involucrada. –

+1

@Chris Lo siento, lo arreglé. Sí, utilicé 'git rebase' después del injerto + rama de filtro. Las etiquetas están bien después de la última, y ​​debería haber recordado que el rebasado crea una rama separada que deja las etiquetas originales intactas. Entonces la pregunta básica es "¿Puede' git rebase' ser instruido para volver a establecer las etiquetas? " –

Respuesta

6

He escrito una secuencia de comandos que Haz esto.

$ git-rebase-tags master 
Rebasing 107 tags onto 'master' 
Can't rebase tag 'staging-deploy-01' because there are no identical commits on 'master' 
Pointed tag 'v0.0.11' at commit 81e16f2ca1bc7802547bf19c1dba1a68212eafff 
Pointed tag 'v0.0.12' at commit 17051cc28084dd56ae56e96767bceee46217c02d 
Pointed tag 'v0.0.13' at commit 5d795076ba4b33f81d327dcf9bff727cef7771a2 
[...] 

Ver gist.github.com/908381.

Pero aún mejor, utilice la opción --tag-name-filter incorporada en git-filter-branch (1).

+0

+1 gracias, la secuencia de comandos es buena para que aprenda sobre las ventajas de ruby ​​:) –

+0

¿El script también transferirá los mensajes que anotaron las etiquetas antiguas? –

3

No hay una forma integrada de hacer lo que quiera con git. 'git rebase --tags' podría ser interesante, pero no existe.

Si los mensajes de cometer son idénticos, como usted dice, entonces podría ir a través de cada etiqueta en refs/etiquetas, hacer:

'git log -1 --pretty=oneline <tagname>' 

comparar el mensaje de confirmación a la lista completa:

'git log --pretty=oneline <newbranches>' 

Si encuentra una coincidencia (y el hash SHA1 es diferente), haga:

'git tag --force <tagname> <new SHA1>' 
2

Según Thomas Rast en http://git.661346.n2.nabble.com/Rebase-with-tags-td5582971.html:

Leonid Podolny escribió:

¿Es posible, por lo menos, para recibir un conjunto de (edad cometen, nuevo commit) pares, por lo que escribiré un pequeño guión que hará eso por mí?

El gancho post-reescritura obtiene esta lista, por lo que puede utilizar que si quieres a .

+0

Interesante, voy a intentarlo la próxima vez que pruebe una nueva base de datos. ¡Gracias! –

2

Hay una manera de hacer git filter-branch etiquetas actualizar automáticamente modificados usando la opción --tag-name-filter, tal como se describe in this answer.

2

he elaborado mi propia aplicación pitón, git rebasetags

En caso de que el rebase es interactivo, se le presentará con un shell bash donde se pueden hacer los cambios. Al salir de ese caparazón, las etiquetas serán restauradas.

enter image description here

De this post

Cuestiones relacionadas