Как получить последний идентификатор фиксации удаленного репо с помощью curl-подобной команды?

Я хочу получить идентификатор последней фиксации удаленного репозитория git.

Команда git rev-parse HEAD работает для локально клонированного репозитория git, но я хочу получить его из исходного репозитория GIT с помощью команды CURL или около того.

Например: я хочу получить последний идентификатор фиксации URL-адреса git https://git.appfactorypreview.wso2.com/history/apiapp.git/.

Как?


person Manisha Eleperuma    schedule 04.10.2013    source источник


Ответы (7)


попробуйте эту команду

git log --format="%H" -n 1
person Litmus    schedule 04.10.2013
comment
вы можете удалить трубу, выполнив git log --format="%H" -n 1 - person gMale; 15.04.2014
comment
git log -n1 --format="%h" предоставит сокращенный хэш коммита. - person starlocke; 15.09.2016
comment
Это не верно. В git 2.1.4 %H отображает идентификатор локального коммита, а не удаленного. - person John Eikenberry; 05.10.2016
comment
Где вы указали удаленный URL? - person Ding-Yi Chen; 14.09.2017
comment
Этот вопрос был изменен, так как я ответил на него. Для удаленного репо вы можете обратиться к ответу @jszakmeister здесь stackoverflow.com/a/19176736/1243123 - person Litmus; 15.09.2017
comment
Вопрос действительно был изменен, но только для удобства чтения. ОП прямо заявил, что у него нет локального клона, и он хотел использовать решение, подобное curl. - person mariotomo; 04.01.2018
comment
Также есть git log | head -1. - person Chai T. Rex; 18.08.2018
comment
git config --global alias.lc 'log -n1 --format="%h"' делает его глобальным псевдонимом, поэтому вы можете ввести git lc (последняя фиксация). Я часто использую сокращенные хэши коммитов для непомеченных/нестабильных релизных сборок. - person cbix; 08.09.2018

Я думаю, что вы хотите это:

git ls-remote $URL HEAD

Если HEAD не существует в удаленном репозитории, вы, вероятно, захотите:

git ls-remote $URL refs/heads/master

Обратите внимание, что в первом случае HEAD будет указывать на ветку по умолчанию для проверки в репозитории. Вы должны быть уверены, что это именно та ветка, которую вы хотите, или просто используйте вторую форму и укажите ту, которую вы хотите (замените refs/heads/master на имя нужной вам ветки: refs/heads/BRANCH_NAME.

person John Szakmeister    schedule 04.10.2013
comment
Вы не можете использовать HEAD, потому что это указатель на текущую ветку. Но в голом репо не существует HEAD. - person silvio; 04.10.2013
comment
Неправда, что его никогда не существует. Дело и точка: git ls-remote git://github.com/jszakmeister/vimfiles.git HEAD. В чистом репо он сообщает Git, какую ветку использовать в качестве ветки по умолчанию. Это правда, что вы не можете рассчитывать на его существование. Итак, в этом случае вы должны использовать соответствующее имя ссылки. Я обновлю свой ответ. - person John Szakmeister; 04.10.2013

Другой способ, без использования git log:

git rev-parse HEAD

person Bruno Duyé    schedule 29.11.2018
comment
Очень хорошее решение - person ; 30.12.2018

Вы можете использовать git ls-remote для этого. Поскольку я получаю 'Unauthorized access for repository apiapp.git', я использую в качестве примера torvalds linux-repo.

$ git ls-remote --heads git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
6d15ee492809d38bd62237b6d0f6a81d4dd12d15        refs/heads/master
person silvio    schedule 04.10.2013

Короткий хэш последнего идентификатора коммита гораздо более удобочитаем (читай: удобен для пользователя). Для потомков два способа получить короткий хэш последнего идентификатора коммита:

git rev-parse --short HEAD

OR

git log -n1 --format="%h"
person rouble    schedule 17.01.2021

Самый простой способ, которым я пользуюсь:

git rev-parse origin/develop
person codelovesme    schedule 19.09.2019

мой ответ не поможет OP, потому что его нет на github, но я думаю, что все равно упомяну его, потому что он использует curl или wget, как просил OP.

wget -qO- http://api.github.com/repos/Ghini/ghini.desktop/commits/ghini-1.0

Ghini — мой репозиторий, ghini.desktop — мой репозиторий, ghini-1.0 — интересующая меня ветка. Замените их в соответствии с вашим случаем.

ответ JSON представляет собой словарь, и OP интересовало его поле sha, но оно содержит гораздо больше информации.

person mariotomo    schedule 04.01.2018
comment
Спасибо, это мне очень помогло. Взгляните на это :) gist.github.com/AiyionPrime/ - person Aiyion.Prime; 10.04.2020