2011-04-16 8 views
14

Tengo un script llamado 'git-export' que me ayuda a exportar un repositorio remoto. Se ejecuta así:Cómo ejecutar comandos git en remoto sin tener el repositorio local

git-export http://host.com/git-repo <-t tag or -b branch or -c commit> /local/dir 

Antes de que se utiliza para exportar repositorio local y utiliza estos comandos:

para obtener cometer de rama:

git branch -v --no-abbrev|awk '($1=="'$BRANCH'") || ($1 == "*" && $2 == "'$BRANCH'"){if($1 == "*"){print $3;}else{print $2;}}' 

o

git rev-parse -q --verify $BRANCH^{commit} 

para obtener commit por la etiqueta:

git rev-parse -q --verify $TAG^{commit} 

También tengo guiones para mostrar las etiquetas (tags, versiones, comenzando con v), utilizo git rama -v para mostrar ramas ....

La pregunta es: ¿Cómo puedo hacer estas cosas en el control remoto repositorio sin tener local. ¿Hay alguna forma general de consultar remotamente? Por ejemplo: git --remote=http://host.com/repo branch -v o git --remote=http://host.com/repo log

Resion: Si quiero instalar el software en el host remoto sólo quiero versiones

  1. lista, ramas, etc
  2. exportación específico versión/sucursal/comprometerse y mostrar SHA1 de la confirmación, independientemente cuál de estos exporto (por exportación quiero decir git archive --remote=<repo>|tar x)

edición:

No quiero que actionalyl ejecute los comandos en remoto. Quiero usar el repositorio remoto con comandos locales y mostrarlo formateado.

Respuesta

29

Está buscando git ls-remote. Por ejemplo:

$ git ls-remote git://git.kernel.org/pub/scm/git/git.git 
4d8b32a2e1758236c4c1b714f179892e3bce982c HEAD 
f75a94048af9e423a3d8cba694531d0d08bd82b4 refs/heads/html 
810cae53e0f622d6804f063c04a83dbc3a11b7ca refs/heads/maint 
70b5eebd65f2d47fd69073aed1d3da0f1fd7a017 refs/heads/man 
4d8b32a2e1758236c4c1b714f179892e3bce982c refs/heads/master 
b9f1b13437fd0b8b1857ffbdebb9e1adc50481f0 refs/heads/next 
83a9d3226b19a683a9a783bde0784c2caf19e9a1 refs/heads/pu 
2309986900ed1a5744b3a81c507943593000ce32 refs/heads/todo 
d5aef6e4d58cfe1549adef5b436f3ace984e8c86 refs/tags/gitgui-0.10.0 
3d654be48f65545c4d3e35f5d3bbed5489820930 refs/tags/gitgui-0.10.0^{} 
33682a5e98adfd8ba4ce0e21363c443bd273eb77 refs/tags/gitgui-0.10.1 
729ffa50f75a025935623bfc58d0932c65f7de2f refs/tags/gitgui-0.10.1^{} 
... 
(git.git has a lot of tags!) 

Puede limitarse a las ramas con la opción --heads o etiquetas con la opción --tags, o especificar un patrón para seleccionar árbitros, por ejemplo, para ver sólo las etiquetas de versión git de git.git, git ls-remote <url> refs/tags/v* . O quizás ya sepa exactamente qué referencia quiere: git ls-remote <url> HEAD.

No se pueden ejecutar comandos arbitrarios en controles remotos arbitrarios, sin embargo. Los protocolos de transferencia no son compatibles, están diseñados para admitir listados de referencias y transferir objetos (a través de paquetes). En particular, no podrá hacer nada análogo al rev-list. Estará limitado a obtener SHA1 para confirmaciones apuntadas por refs.

+0

que parece bastante útil y creo que hará el trabajo, pero ¿hay un comando que acepte --format argument? Uno de los problemas con este formato:^{} significa que este es el compromiso al que apunta la etiqueta. Sin embargo, si la etiqueta es liviana, la confirmación sha1 será sin^{}. Quiero obtener el sha1 de la confirmación al listar las etiquetas, independientemente del tipo de etiqueta. Usé 'for-each-ref' con --format para hacer eso. ver 'man git-for-each-ref' – NickSoft

+0

@NickSoft: Sí, sé a qué te refieres, pero creo que probablemente tendrás que hacerlo tú mismo. Si puede contar con todas las etiquetas que se anotan (lo que probablemente sea una buena práctica), puede hacer 'git ls-remote refs/tags/*^{}', pero de lo contrario, creo que tendrá que leer la lista y hacer un poco de post-procesamiento. (Por supuesto, tenga en cuenta que puede usar el SHA1 de la etiqueta comentada para 'git archive' de todos modos, por lo que también podría quitar todas las confirmaciones apuntadas con un' grep -v '\^{} $' 'y ser hecho con eso.) – Cascabel

0

Puede utilizar rizo para comprobar si existe la URL específica o no por ejemplo cuando intento para golpear AngularJS url

$ curl -I https://github.com/angular/angularjs.org/tree/master/src 
**HTTP/1.1 200 OK** 
Server: GitHub.com 
Date: Mon, 11 Aug 2014 15:22:40 GMT 

existente Cuando golpeo en una dirección URL incorrecta

$ curl -I https://github.com/angular/angularjs.org/tree/master/abcd 
**HTTP/1.1 404 Not Found** 
Server: GitHub.com 
Date: Mon, 11 Aug 2014 15:24:06 GMT 

Espero que esto ayude a

Cuestiones relacionadas