programing

원격 git 저장소에서 최신 커밋의 SHA를 얻는 방법은 무엇입니까?

goodcopy 2021. 1. 16. 10:35
반응형

원격 git 저장소에서 최신 커밋의 SHA를 얻는 방법은 무엇입니까?


누구든지 git 저장소 외부에서 특정 분기의 최신 SHA를 얻는 방법을 알고 있습니까?

git 저장소에있는 경우 다음을 수행 할 수 있습니다.

git log origin/branch_X | head -1

그러나 나는 git 저장소 내부에 있지 않으며 clone태그 / 분기의 최신 SHA를 얻기 위해 저장소가 필요하지 않도록하고 싶습니다 . 이 작업을 수행하는 영리한 방법이 있습니까?


원격 저장소에서 지정된 분기의 SHA-1을 확인하려면 정답 이 맞습니다.

$ git ls-remote <URL>

그러나 동일한 파일 시스템을 사용하는 경우 더 간단한 솔루션 (출력에서 SHA-1을 추출 할 필요가 없음)은 다음과 같습니다.

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

' '옵션에 대한 설명은 git (1) 맨 페이지를 참조하십시오 --git-dir.


사용 REV-구문 분석

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 

제 동료가 대답했습니다.

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

-스티브


git URL 사용 :

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

액세스 가능한 시스템에서 디렉토리 사용 :

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

이것은 트릭을 할 것입니다 git ls-remote REMOTE | awk "/BRANCH/ {print \$1}"

REMOTE를 원격 저장소의 이름으로 바꾸고 BRANCH를 브랜치의 이름으로 바꿉니다.


위의 의견에서 언급했듯이 이것이 최상의 솔루션입니다.

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


로컬 리포지토리의 현재 체크 아웃 된 브랜치에서 SHA-1 만 원하는 경우 origin / branch_X 대신 HEAD를 지정할 수 있습니다.

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


분기 헤드에 대한 참조는 .git/refs/트리에 저장됩니다 . 따라서 다음에서 최신 커밋의 해시를 찾을 수 있습니다.

cat .git/refs/remotes/origin/branch_X

경로는 약간 다를 수 있습니다.


여기 저장소 내에서 작동하는 복사-붙여 넣기 솔루션이 있습니다.

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

특정 분기와 관련된 정보 만 가져온 다음 구문 분석하여 최신 sha를 가져 오는 것이 좋습니다.
git ls-remote <url> --tags <branch_name> | awk '{print $1;}'

참조 URL : https://stackoverflow.com/questions/1161869/how-to-get-sha-of-the-latest-commit-from-remote-git-repository

반응형