tipos tag qué presentación existen etiquetas etiqueta crear git git-clone git-tag

tag - Descargar una etiqueta específica con Git



qué tipos de etiquetas existen en git (15)

Estoy tratando de averiguar cómo puedo descargar una etiqueta particular de un repositorio Git, es una versión detrás de la versión actual.

Vi que había una etiqueta para la versión anterior en la página web de git, con el nombre del objeto de un número hexadecimal largo.

Pero el nombre de la versión es " Tagged release 1.1.5 " según el sitio.

Probé un comando como este (con nombres cambiados):

git clone http://git.abc.net/git/abc.git my_abc

Y obtuve algo: un directorio, un grupo de subdirectorios, etc.

Si es todo el repositorio, ¿cómo obtengo la versión que estoy buscando? Si no, ¿cómo descargo esa versión en particular?


A partir de la respuesta de Peter Johnson, creé un bonito alias para mí:

alias gcolt="git checkout /`git tag | sort -V | tail -1/`"

También conocido como ''última etiqueta de git checkout''.

Esto se basa en la versión de tipo GNU, que maneja apropiadamente situaciones como la que el Oranger señaló:

v1.0.1 ... v1.0.9 v1.0.10

Si está en un Mac, brew install coreutils y luego llame a gsort en su lugar.



Lo que hago es a través de la API github:

curl -H "Authorization: token %(access_token)s" -sL -o /tmp/repo.tar.gz "http://api.github.com/repos/%(organisation)s/%(repo)s/tarball/%(tag)s" ;/ tar xfz /tmp/repo.tar.gz -C /tmp/repo --strip-components=1 ; /


No soy un experto en git, pero creo que esto debería funcionar:

git clone http://git.abc.net/git/abc.git cd abc git checkout my_abc

O

git clone http://git.abc.net/git/abc.git cd abc git checkout -b new_branch my_abc

La segunda variación establece una nueva rama basada en la etiqueta, que le permite evitar un ''HEAD separado''. (git-checkout manual)

Cada repositorio de git contiene el historial de revisiones completo, por lo que clonar el repositorio le da acceso a la última confirmación, además de todo lo que vino antes, incluida la etiqueta que está buscando.


Para retirar solo una etiqueta dada para el despliegue, uso por ejemplo:

git clone -b ''v2.0'' --single-branch --depth 1 https://github.com/git/git.git

Esta parece ser la forma más rápida de retirar el código de un repositorio remoto si uno solo tiene interés en el código más reciente en lugar de en un repositorio completo. De esta manera, se parece al comando ''svn co''.


Primero busca todas las etiquetas en ese control remoto específico

git fetch <remote> ''refs/tags/*:refs/tags/*''

o simplemente escriba

git fetch <remote>

A continuación, compruebe las etiquetas disponibles

git tag -l

luego cambia a esa etiqueta específica usando el comando de abajo

git checkout tags/<tag_name>

Espero que esto te ayude!


Puede usar git archive para descargar una bola de alquitrán para una etiqueta o un ID de confirmación dado:

git archive --format=tar --remote=[hostname]:[path to repo] [tag name] > tagged_version.tar

También puede exportar un archivo zip de una etiqueta.

  1. Etiquetas de lista:

    git tag 0.0.1 0.1.0

  2. Exportar una etiqueta:

    git archive -o /tmp/my-repo-0.1.0.zip --prefix=my-repo-0.1.0/ 0.1.0

  3. Notas:

    • No es necesario especificar el formato. Será recogido por el nombre del archivo de salida.
    • Especificar el prefijo hará que su código se exporte a un directorio (si incluye una barra diagonal).

Revisé la documentación de git checkout , reveló una cosa interesante:

git checkout -b <new_branch_name> <start_point>, donde <start_point> es el nombre de un commit en el que se inicia la nueva rama; Por defecto a HEAD

Por lo tanto, podemos mencionar el nombre de la etiqueta (ya que la etiqueta no es más que un nombre de confirmación) como, digamos:

>> git checkout -b 1.0.2_branch 1.0.2
despues modifica algunos archivos
>> git push --tags

PD: en Git, no puede actualizar una etiqueta directamente (ya que la etiqueta es solo una etiqueta para un compromiso), debe verificar la misma etiqueta que una rama y luego comprometerse con ella y luego crear una etiqueta separada.


Si sus etiquetas se pueden sort usando el comando de sort Linux, use esto:

git tag | sort -n | tail -1

p.ej. si la git tag devuelve:

v1.0.1 v1.0.2 v1.0.5 v1.0.4

git tag | sort -n | tail -1 git tag | sort -n | tail -1 dará salida:

v1.0.5

git tag | sort -n | tail -2 | head -1 git tag | sort -n | tail -2 | head -1 dará salida:

v1.0.4

(porque pediste la segunda etiqueta más reciente)

para verificar la etiqueta, primero clona el repositorio, luego escribe:

git checkout v1.0.4

..o cualquier etiqueta que necesites.


tratar:

git clone -b <name_of_the_tag> <repository_url> <destination>


Revisando Etiquetas

Si desea ver las versiones de los archivos a los que apunta una etiqueta, puede hacer un checkout de git, aunque esto coloca su repositorio en el estado "HEAD desapegado", que tiene algunos efectos secundarios negativos:

$ git checkout 2.0.0 Note: checking out ''2.0.0''. You are in ''detached HEAD'' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final $ git checkout 2.0-beta-0.1 Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final HEAD is now at df3f601... add atlas.json and cover image

En el estado "HEAD desapegado", si realiza cambios y luego crea una confirmación, la etiqueta permanecerá igual, pero su nueva confirmación no pertenecerá a ninguna rama y será inalcanzable, excepto por el hash de confirmación exacto. Por lo tanto, si necesita realizar cambios, por ejemplo, si está corrigiendo un error en una versión anterior, generalmente querrá crear una rama:

$ git checkout -b version2 v2.0.0 Switched to a new branch ''version2''

Si hace esto y realiza una confirmación, su rama versión 2 será ligeramente diferente a su etiqueta v2.0.0 ya que avanzará con sus nuevos cambios, así que tenga cuidado.


Utilice el interruptor --single-branch (disponible a partir de Git 1.7.10) . La sintaxis es:

git clone -b <tag_name> --single-branch <repo_url> [<dest_dir>]

Por ejemplo:

git clone -b ''v1.9.5'' --single-branch https://github.com/git/git.git git-1.9.5

El beneficio: Git recibirá objetos y (deberá) resolver los deltas solo para la rama / etiqueta especificada, ¡mientras se extrae la misma cantidad de archivos! Dependiendo del repositorio de origen, esto le ahorrará una gran cantidad de espacio en disco. (Además, será mucho más rápido.)


$ git clone

Te daré todo el repositorio.

Después de la clonación, puede listar las etiquetas con $ git tag -l y luego retirar una etiqueta específica:

$ git checkout tags/<tag_name>

Aún mejor, realice el pago y cree una rama (de lo contrario, estará en una rama que lleva el nombre del número de revisión de la etiqueta):

$ git checkout tags/<tag_name> -b <branch_name>


git clone --branch my_abc http://git.abc.net/git/abc.git

Clonará el repositorio y lo dejará en la etiqueta que le interesa.

Documentación para 1.8.0 de estados de clonación git .

--Branch también puede tomar etiquetas y separar el HEAD en ese commit en el repositorio resultante.


git fetch <gitserver> <remotetag>:<localtag>

===================================

Acabo de hacer esto. Primero me aseguré de saber la ortografía del nombre de la etiqueta.

git ls-remote --tags gitserver; : or origin, whatever your remote is called

Esto me dio una lista de etiquetas en mi servidor git para elegir. El cartel original ya sabía el nombre de su etiqueta, por lo que este paso no es necesario para todos. La salida se veía así, aunque la lista real era más larga.

8acb6864d10caa9baf25cc1e4857371efb01f7cd refs/tags/v5.2.2.2 f4ba9d79e3d760f1990c2117187b5010e92e1ea2 refs/tags/v5.2.3.1 8dd05466201b51fcaf4ca85897347d82fcb29518 refs/tags/Fix_109 9b5087090d9077c10ba22d99d5ce90d8a45c50a3 refs/tags/Fix_110

Escogí la etiqueta que quería y busqué eso y nada más como sigue.

git fetch gitserver Fix_110

Luego etiqueté esto en mi máquina local, dando a mi etiqueta el mismo nombre.

git tag Fix_110 FETCH_HEAD

No quería clonar el repositorio remoto como otras personas han sugerido hacerlo, ya que el proyecto en el que estoy trabajando es grande y quiero desarrollarlo en un entorno limpio y agradable. Siento que esto está más cerca de las preguntas originales "Estoy tratando de averiguar cómo descargar una etiqueta particular" que la solución que sugiere la clonación de todo el repositorio. No veo por qué alguien debería tener una copia del código fuente de Windows NT y Windows 8.1 si quiere ver el código fuente DOS 0.1 (por ejemplo).

Tampoco quise usar CHECKOUT como otros han sugerido. Me chequé una sucursal y no quise afectar eso. Mi intención era buscar el software que quería para poder elegir algo y agregarlo a mi desarrollo.

Probablemente hay una forma de obtener la etiqueta en sí, en lugar de solo una copia de la confirmación que fue etiquetada. Tuve que etiquetar el compromiso obtenido. EDIT: Ah sí, lo he encontrado ahora.

git fetch gitserver Fix_110:Fix_110

Donde se ven los dos puntos, es el nombre remoto: nombre local y aquí están los nombres de las etiquetas. Esto se ejecuta sin alterar el árbol de trabajo, etc. Parece que solo se copian cosas desde el control remoto a la máquina local para que tenga su propia copia.

git fetch gitserver --dry-run Fix_110:Fix_110

con la opción --dry-run agregada le permitirá echar un vistazo a lo que haría el comando, si desea verificar que es lo que desea. Así que supongo que una simple

git fetch gitserver remotetag:localtag

es la respuesta real

=

Una nota aparte sobre las etiquetas ... Cuando comienzo algo nuevo, normalmente etiqueto el repositorio vacío después de git init, ya que

git rebase -i XXXXX

requiere un compromiso, y surge la pregunta "¿cómo reajustar los cambios que incluyen su primer cambio de software?" Así que cuando empiezo a trabajar lo hago.

git init touch .gitignore [then add it and commit it, and finally] git tag EMPTY

es decir, crear un compromiso antes de mi primer cambio real y luego usarlo

git rebase -i EMPTY

Si quiero reajustar todo mi trabajo, incluido el primer cambio .