¿Existe una forma sencilla de "describir git" un repositorio remoto?

Quiero ejecutar el siguiente comando en un servidor remoto:

git archive --prefix="$tag/" --remote="ssh://$gitserver/var/git/$repo" "$tag" | tar -xvf-

El problema es que no se que $tag es. Debería ser el resultado de git describe --abbrev=0 en un clon actualizado, pero no sé cómo obtener esa información sin hacer un clon local del repositorio. ¿Es posible hacer esto sin hacer un clon local?

preguntado el 08 de noviembre de 11 a las 18:11

2 Respuestas

#!/usr/bin/awk -f
BEGIN {
  FS = "[ /^]+"
  while ("git ls-remote " ARGV[1] "| sort -Vk2" | getline) {
    if (!sha)
      sha = substr($0, 1, 7)
    tag = $3
  }
  while ("curl -s " ARGV[1] "/releases/tag/" tag | getline)
    if ($3 ~ "commits")
      com = $2
  printf com ? "%s-%s-g%s\n" : "%s\n", tag, com, sha
}

Salida de muestra

$ git-describe-remote.awk https://github.com/stedolan/jq
jq-1.4-148-g89791a0

Respondido 25 Abr '17, 18:04

git ls-remote es definitivamente lo que quieres. +1. - John Szakmeister

este es un script muy bueno y funciona muy bien en la línea de comandos ... pero no puedo usar awk en mi proyecto. así que estoy tratando de extraer el significado de eso ... tag = $3 debería ser igual al nombre de la etiqueta, sin las referencias / etiquetas / prefijo, ¿verdad? curl -s sigue diciéndome Not Found - Mathieu J.

ok, lo entiendo, esperaba que el html completo no fuera lo que se esperaba. pero simplemente busca la línea donde $ 3 es "confirmaciones" en el html completo de github.com para esta versión, y selecciona el número de confirmaciones. bien. Gracias - Mathieu J.

La única forma en que podría comenzar a analizar su etiqueta, sin agregar demasiado a su disco local, sería:

  • hacer un repositorio vacío
  • agregue la dirección remota de su repositorio remoto
  • prueba un git fetch --dry-run

Sin embargo, eso cargará los archivos del paquete del repositorio remoto.
No creo que puedas consultar esta información sin descargar algo.

Lo he hecho para un repositorio de gitolite, por ejemplo:

VonC@NETVONC /c/prog/git
$ git init g2
Initialized empty Git repository in c:/prog/git/g2/.git/

VonC@NETVONC /c/prog/git
$ cd g2

VonC@NETVONC /c/prog/git/g2 (master)
$ git remote add origin https://github.com/sitaramc/gitolite.git

VonC@NETVONC /c/prog/git/g2 (master)
$ git fetch --dry-run
remote: Counting objects: 5114, done.
remote: Compressing objects: 100% (1919/1919), done.
remote: Total 5114 (delta 3548), reused 4664 (delta 3142)
Receiving objects: 100% (5114/5114), 1.81 MiB | 722 KiB/s, done.
Resolving deltas: 100% (3548/3548), done.
From https://github.com/sitaramc/gitolite
 * [new branch]      bp-v2.0.3  -> origin/bp-v2.0.3
 * [new branch]      fedora-temp -> origin/fedora-temp
 * [new branch]      gh-pages   -> origin/gh-pages
 * [new branch]      master     -> origin/master
 * [new branch]      pu         -> origin/pu
 * [new branch]      temp-br--data-dumper-problem-demo -> origin/temp-br--data-dumper-problem-demo
 * [new branch]      vrs        -> origin/vrs
 * [new tag]         v2.1       -> v2.1
From https://github.com/sitaramc/gitolite
 * [new tag]         v0.50      -> v0.50
 * [new tag]         v0.55      -> v0.55
[...]
 * [new tag]         v2.0rc2    -> v2.0rc2
 * [new tag]         v2.1       -> v2.1
                                   ^^^^
                                    |
                                    --- could be the tag you need

Como se mencionó anteriormente, los únicos rastros son los archivos del paquete, por lo que al menos puede limpiarlos fácilmente una vez que tenga su información:

VonC@NETVONC /c/prog/git/g2 (master)
$ l .git/objects/pack/
total 1000
drwxr-xr-x    4 VonC     Administ        0 Nov  8 19:45 ..
-r--r--r--    1 VonC     Administ  1898987 Nov  8 19:46 pack-c70771bc8a5ecc099ed88da0c3f631f84b34fe9d.pack
-r--r--r--    1 VonC     Administ   144264 Nov  8 19:46 pack-c70771bc8a5ecc099ed88da0c3f631f84b34fe9d.idx
drwxr-xr-x    2 VonC     Administ     4096 Nov  8 19:46 .

respondido 08 nov., 11:22

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.