Как получить SHA последней фиксации из удаленного хранилища git?
Кто-нибудь знает, как получить последнюю SHA данной ветки извне репозиторий git?
Если вы находитесь внутри репозитория git, вы можете сделать:
git log origin/branch_X | head -1
Однако я не располагаюсь в репозитории git, и мне бы хотелось, чтобы не было clone
в репозитории, чтобы получить последнюю SHA тега/ветки. Есть ли разумный способ сделать это?
Ответы
Ответ 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;}'