tag - git remote add origin




¿Cómo borrar una etiqueta remota de git? (13)

Método hasta 100 veces más rápido para miles de etiquetas remotas

Después de leer estas respuestas mientras necesito eliminar más de 11,000 etiquetas, aprendí a confiar en estos métodos o los xargs tardan demasiado, a menos que tengas horas para grabar.

Luchando, encontré dos maneras mucho más rápidas. Para ambos, comience con git tag o git ls-remote --tags para hacer una lista de las etiquetas que desea eliminar en el control remoto. En los ejemplos a continuación, puede omitir o reemplazar sorting_proccessing_etc con cualquier grep , sort , sorting_proccessing_etc o head que desee ( por ejemplo, grep -P "my_regex" | sort | head -n -200 etc. ):

Este primer método es, con mucho, el más rápido, tal vez de 20 a 100 veces más rápido que usar xargs , y funciona con al menos varios miles de etiquetas a la vez.

git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh

¿Como funciona esto? La lista normal de etiquetas separadas por líneas se convierte en una sola línea de etiquetas separadas por espacios, cada una de ellas precedida por : so. . .

tag1   becomes
tag2   ======>  :tag1 :tag2 :tag3
tag3

El uso de git push con esta etiqueta de formato no empuja nada en cada referencia remota, borrándolo (el formato normal para empujar de esta manera es local_ref_path:remote_ref_path ).

El método dos se desglosa como una respuesta separada en otra parte de esta misma página.

Después de estos dos métodos, es probable que también desee eliminar sus etiquetas locales. Esto es mucho más rápido, así que podemos volver a usar xargs y git tag -d , lo cual es suficiente.

git tag | sorting_processing_etc | xargs -L 1 git tag -d

O similar a la eliminación remota:

git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")

¿Cómo eliminar una etiqueta git que ya ha sido empujada?


Eliminar etiqueta local '12345'

git tag -d 12345

Eliminar la etiqueta remota '12345' (por ejemplo, la versión de GitHub también)

git push origin :refs/tags/12345

Enfoque alternativo

git push --delete origin tagName
git tag -d tagName


Como sugirió @CubanX, he dividido esta respuesta de mi original:

Aquí hay un método que es varias veces más rápido que xargs y puede escalar mucho más con ajustes. Utiliza la API de Github , un token de acceso personal, y aprovecha la utilidad parallel .

git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \ 
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H 
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\"  \
-H \"cache-control: no-cache\"`

parallel tiene muchos modos de operación, pero generalmente paraleliza cualquier comando que le des a la vez que le permite establecer límites en la cantidad de procesos. Puede alterar el parámetro --jobs 2 para permitir una operación más rápida, pero tuve problemas con los límites de velocidad de Github, que actualmente son 5000 / hr, pero también parece tener un límite a corto plazo no documentado.

Después de esto, probablemente querrás eliminar tus etiquetas locales también. Esto es mucho más rápido, así que podemos volver a usar xargs y git tag -d , lo cual es suficiente.

git tag | sorting_processing_etc | xargs -L 1 git tag -d

Desde tu terminal, haz esto:

git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}

Ahora ve a Github.com y actualiza, desaparecen.


Para eliminar la etiqueta del repositorio remoto:

git push --delete origin TAGNAME

También es posible que desee eliminar la etiqueta localmente:

git tag -d TAGNAME

Parece mucho trabajo para algo que xargs ya hace. Mirando hacia atrás a través de este hilo, supongo que la lentitud con los xargs que experimentó se debe a que la respuesta original utilizó xargs -n 1 cuando realmente no era necesario.

Esto es equivalente a su método uno, excepto que xargs trata automáticamente con la longitud máxima de la línea de comando:

git tag | sorting_processing_etc | xargs git push --delete origin

xargs puede ejecutar procesos en paralelo también. Método 2 con xargs :

git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin

Lo anterior utiliza un máximo de 5 procesos para manejar un máximo de 100 argumentos en cada proceso. Puedes experimentar con los argumentos para encontrar lo que funciona mejor para tus necesidades.


Sencillo script para eliminar la etiqueta dada de las ubicaciones locales y de origen. Con un cheque si realmente existe la etiqueta.

if [ $(git tag -l "$1") ]; then
    git tag --delete  $1
    git push --delete origin $1

    echo done.
else
    echo tag named "$1" was not found
fi

Cómo utilizar:

  • Cree un archivo de script de shell (por ejemplo, git-tag-purge.sh) y pegue el contenido.
  • Chmod su archivo de script para hacerlo ejecutable.
  • Hacer que el script esté disponible globalmente
  • cd a tu proyecto git
  • Script de llamada (por ejemplo,
    $>git-tag-purge.sh tag_name
    )

Si está utilizando PowerShell y desea eliminar un montón de ellos:

# Local tags:
git tag -l | foreach { git tag -d $_ }

# Remote tags:
git tag -l | foreach { git push --delete origin $_ }

Por supuesto, también puedes filtrarlos antes de eliminar:

git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }

Si ha creado una etiqueta que comienza con el carácter # , por ejemplo, #ST002 , es posible que no pueda eliminar usando patrones normales. es decir

git tag -d #STOO2

No eliminará la etiqueta, sino que la envolverá en un String Literal como tal.

git tag -d "#ST002" or git tag -d '#ST002'

Eso lo borrará. Espero que ayude a alguien que cometió el error de usar # para escribir nombres de etiquetas.


Si tiene una etiqueta remota v0.1.0 para eliminar, y su control remoto es origin , entonces simplemente:

git push origin :refs/tags/v0.1.0

Si también necesita eliminar la etiqueta localmente:

git tag -d v0.1.0

Consulte la respuesta de Adam Franco para obtener una explicación de lo inusual de Git : sintaxis para su eliminación.


Solo necesita insertar una referencia 'vacía' al nombre de la etiqueta remota:

git push origin :tagname

O, más expresivamente, use la opción --delete (o -d si su versión de git es más antigua que 1.8.0):

git push --delete origin tagname

Si también necesita eliminar la etiqueta local, use:

git tag --delete tagname

Fondo

Empujar una rama, etiqueta u otra referencia a un repositorio remoto implica especificar "empujar dónde, qué fuente, qué destino?"

git push where-to-push source-ref:destination-ref

Un ejemplo del mundo real en el que lleva su rama maestra a la rama maestra del origen es:

git push origin refs/heads/master:refs/heads/master

Que debido a las rutas por defecto, se puede acortar a:

git push origin master:master

Las etiquetas funcionan de la misma manera:

git push origin refs/tags/release-1.0:refs/tags/release-1.0

Que también se puede acortar a:

git push origin release-1.0:release-1.0

Al omitir la referencia de origen (la parte anterior a los dos puntos), usted presiona "nada" al destino, eliminando la referencia en el extremo remoto.


Solo tenga en cuenta que, si tiene una rama remota denominada como etiqueta remota, estos comandos son ambiguos:

git push origin :tagname
git push --delete origin tagname

Entonces debes usar este comando para borrar la etiqueta:

git push origin :refs/tags/<tag>

y este para borrar la rama:

git push origin :refs/heads/<branch>

Si no, obtendrías un error como este:

error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'

Eliminar todas las etiquetas locales y obtener la lista de etiquetas remotas :

git tag -l | xargs git tag -d
git fetch

Eliminar todas las etiquetas remotas

git tag -l | xargs -n 1 git push --delete origin

Limpiar etiquetas locales

git tag -l | xargs git tag -d




git-tag