Как запускать команды git на удаленном компьютере без локального репо - PullRequest
15 голосов
/ 16 апреля 2011

У меня есть скрипт под названием «git-export», который помогает мне экспортировать удаленный репозиторий.Он запускается так:

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

До того, как он был использован для экспорта локального репозитория, и я использовал следующие команды:

, чтобы получить коммит из ветви:

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

или

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

, чтобы получить фиксацию по тегу:

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

также у меня есть скрипты для вывода списка тегов, версий (теги, начинающиеся с v), я использую git branch -v, чтобы показатьветки ....

Вопрос в том, как я могу делать эти вещи в удаленном хранилище, не имея локального.Есть ли какой-нибудь общий способ запроса удаленного.Например: git --remote=http://host.com/repo branch -v или git --remote=http://host.com/repo log

Resion: Если я хочу установить программное обеспечение на удаленном хосте, я просто хочу

  1. перечислить версии, ветви и т. Д.
  2. экспортировать конкретную версию / ветку / коммит и показать SHA1 коммита независимо от того, какой из них я экспортирую (под экспортом я имею в виду git archive --remote=<repo>|tar x)

edit:

ДонНе хочу, чтобы actionalyl запускал команды на пульте.Я хочу использовать удаленный репозиторий с локальными командами и отображать его в формате.

Ответы [ 2 ]

30 голосов
/ 16 апреля 2011

Вы ищете git ls-remote. Например:

$ 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!)

Вы можете ограничить себя ветками с параметром --heads или тегами с параметром --tags, или указать шаблон для выбора ссылок, например, чтобы видеть только теги версии git из git.git, git ls-remote <url> refs/tags/v*. Или вы уже точно знаете, какой реф. Вы хотите: git ls-remote <url> HEAD.

Однако вы не можете запускать произвольные команды на произвольных пультах. Протоколы передачи не поддерживают это - они предназначены для поддержки перечисления ссылок и передачи объектов (через пакеты). В частности, вы не сможете сделать ничего похожего на rev-list. Вы будете ограничены получением SHA1 для коммитов, на которые ссылаются реф.

0 голосов
/ 11 августа 2014

Вы можете использовать curl для проверки, существует ли конкретный URL или нет например когда я пытаюсь нажать 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

Когда я нажимаю неверный URL

$ 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

Надеюсь, это поможет

...