2012-07-03 15 views
17

Me gustaría ver qué etiquetas tengo localmente que no están disponibles en un control remoto en particular. ¿Cómo puedo hacer esto? Sé que puedo hacer git push --tags para impulsarlos a todos. Sin embargo, si hay algunas etiquetas que no quiero presionar, ¿cómo puedo asegurarme de que no me he perdido algunas?Cómo enumerar las etiquetas de Git no eliminadas

Respuesta

22

Puede utilizar el siguiente para ver las etiquetas que existen a nivel local, pero no en las especificadas remoto:

git show-ref --tags | grep -v -F "$(git ls-remote --tags <remote name> | grep -v '\^{}' | cut -f 2)" 

en cuenta que git ls-remote muestra tanto la etiqueta anotado y el envío de datos al que apunta con ^{}, por lo que necesitamos para eliminar los duplicados.

Una alternativa es el uso de las banderas --dry-run/-n a git push:

git push --tags --dry-run 

Esto le mostrará qué cambios habría sido empujado, pero no se vuelven estos cambios.

+1

Dado que está utilizando la salida de 'git ls-remote' para filtrar desde' show-ref', no hay mucho daño al dejar las líneas '^ {}'. Eso nos deja un poco más simple: 'git show-ref --tags | grep -v -F "$ (git ls-remote --etiquetas origin | cut -f 2)" ' – phinze

+1

Este es exactamente el mismo comando, excepto con' 'reemplazado por' origin'. Use esto para copiar/pegar: 'git show-ref --tags | grep -v -F "$ (git ls-remote --etiquetas origin | grep -v '\^{}' | cut -f 2)" ' – funroll

2

Para que conste, estoy usando una variante de esto con el comando 'comunicador':

comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2) 

lo estoy usando como un alias de git en .gitconfig, la fiesta adecuada citar así:

[alias] 
    unpushed-tags = "!bash -c \"comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)\"" 
Cuestiones relacionadas