Подтвердить что ты не робот

Как получить SHA последней фиксации из удаленного хранилища git?

Кто-нибудь знает, как получить последнюю SHA данной ветки извне репозиторий git?

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

git log origin/branch_X | head -1

Однако я не располагаюсь в репозитории git, и мне бы хотелось, чтобы не было clone в репозитории, чтобы получить последнюю SHA тега/ветки. Есть ли разумный способ сделать это?

4b9b3361

Ответ 1

Если вы хотите проверить SHA-1 данной ветки в удаленном репозитории, то ваш ответ правильный:

$ git ls-remote <URL>

Однако, если вы находитесь на одной и той же файловой системе, более простое решение (не требующее извлечь SHA-1 из вывода) было бы просто:

$ git --git-dir=/path/to/repo/.git rev-parse origin/branch_X

См. git (1) manpage для описания опции < --git-dir.

Ответ 2

Используйте rev-parse

git rev-parse origin/master # to get the latest commit on the remote

git rev-parse HEAD          # to get the latest commit on the local 

Ответ 3

Мой коллега ответил мне на это:

git ls-remote ssh://git.dev.pages/opt/git/repos/dev.git <branch>

-Стив

Ответ 4

Это должно сделать трюк git ls-remote REMOTE | awk "/BRANCH/ {print \$1}"

Замените REMOTE именем удаленного репозитория и ФИРМЫ с именем ветки.

Ответ 5

Использование git URL:

$ git ls-remote <URL> | head -1 | sed "s/HEAD//"

Использование каталога в доступной системе:

$ git --git-dir=/path/to/repo/.git rev-parse origin/<targeted-banch>

Ответ 6

Как упоминалось в комментариях выше, это должно быть лучшим решением:

$ git ls-remote <URL> | head -1 | cut -f 1

Ответ 7

Ссылки на головки ветвей хранятся в дереве .git/refs/. Таким образом, вы сможете найти хэш последней фиксации:

cat .git/refs/remotes/origin/branch_X

Ваш путь может немного отличаться.

Ответ 8

Если вы просто хотите, чтобы SHA-1 из текущей ветки вашего локального репо, вы можете просто указать HEAD вместо origin/branch_X:

git --git-dir=/path/to/repo/.git rev-parse --verify HEAD

Ответ 9

Вот решение для копирования-вставки, которое работает внутри репозитория.

origin_head=$(git ls-remote --heads $(git config --get remote.origin.url) | grep "refs/heads/master" | cut -f 1)
if [ $origin_head != "$(git rev-parse HEAD)" ]; then
    echo >&2 "HEAD and origin/master differ."
    exit 1
fi

Ответ 10

Я рекомендую получать информацию, относящуюся только к данной ветке, а затем анализировать, чтобы получить последнюю шагу:
git ls-remote <url> --tags <branch_name> | awk '{print $1;}'