문제

(지금은) Git 변경 집합을 TFS에 저장된 작업 항목에 연결하는 기능을 유지하고 싶습니다.

나는 Git 변경 세트의 메시지에 작업 항목 식별자를 삽입할 수 있는 도구(Git의 후크를 사용하여)를 이미 작성했습니다.

그러나 Git 커밋의 식별자(해시)를 사용자 지정 TFS 작업 항목 필드에 저장하고 싶습니다.이렇게 하면 TFS에서 작업 항목을 검사하고 해당 작업 항목과 연결된 Git 변경 집합이 무엇인지 확인할 수 있습니다.

Git의 현재 커밋에서 해시를 쉽게 검색하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

임의의 확장 된 객체 기준을 SHA-1로 바꾸려면 간단히 사용하십시오. git-rev-parse, 예를 들어

git rev-parse HEAD

또는

git rev-parse --verify HEAD

사이드 노트 : 회전하고 싶다면 참조 (가지 그리고 태그) SHA-1에 있습니다 git show-ref 그리고 git for-each-ref.

다른 팁

단축 된 해시 만 원한다면 :

git log --pretty=format:'%h' -n 1

또한, %H를 사용하면 긴 해시를 얻는 또 다른 방법입니다.

다른 하나, git 로그 사용 :

git log -1 --format="%H"

약간 짧지 만 @outofculture와 매우 유사합니다.

전체 SHA를 얻으려면 :

$ git rev-parse HEAD
cbf1b9a1be984a9f61b79a05f23b19f66d533537

단축 버전을 얻으려면 :

$ git rev-parse --short HEAD
cbf1b9a

완전성을 위해 아무도 아직 아무도 제안하지 않았기 때문에. .git/refs/heads/master 한 줄만 포함하는 파일입니다. 최신 커밋의 해시 master. 그래서 당신은 거기에서 그것을 읽을 수 있습니다.

또는 명령으로 :

cat .git/refs/heads/master

업데이트:

Git은 이제/refs/heads/폴더의 파일 대신 팩 -ref 파일에 일부 헤드 심판 저장을 지원합니다. https://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html

항상 있습니다 git describe 또한. 기본적으로 그것은 당신에게 제공합니다 -

john@eleanor:/dev/shm/mpd/ncmpc/pkg (master)$ git describe --always
release-0.19-11-g7a68a75

해시를 커밋하십시오

git show -s --format=%H

약식 커밋 해시

git show -s --format=%h

딸깍 하는 소리 여기 이상 git show 예.

사용 git rev-list --max-count=1 HEAD

스크립트 중에 해시를 변수에 저장 해야하는 경우 사용할 수 있습니다.

last_commit=$(git rev-parse HEAD)

또는 처음 10 자만 원한다면 (github.com처럼)

last_commit=$(git rev-parse HEAD | cut -c1-10) 

내가 아는 가장 간결한 방법 :

git show --pretty=%h 

해시의 특정 숫자를 원한다면 다음을 추가 할 수 있습니다.

--abbrev=n

아마도 당신은 별명을 원하기 때문에 모든 멋진 세부 사항을 기억할 필요가 없습니다. 아래 단계 중 하나를 수행 한 후에는 간단히 입력 할 수 있습니다.

$ git lastcommit
49c03fc679ab11534e1b4b35687b1225c365c630

후속 조치 받아 들여진 답변, 다음은 이것을 설정하는 두 가지 방법이 있습니다.

1) 글로벌 구성을 편집하여 명시 적 방법을 가르치십시오 (원래 답변) :

 # open the git config editor
 $ git config --global --edit
 # in the alias section, add
 ...
 [alias]
   lastcommit = rev-parse HEAD
 ...

2) 또는 Adrien의 최근에 언급 한 바와 같이 Git을 가르치기위한 바로 가기를 좋아한다면 :

$ git config --global alias.lastcommit "rev-parse HEAD"

여기에서 사용하십시오 git lastcommit 마지막 커밋의 해시를 보여줍니다.

매우 해키적인 방법을 원한다면:

cat .git/`cat .git/HEAD | cut -d \  -f 2`

기본적으로 git은 HEAD의 위치를 ​​.git/HEAD 형식으로 저장합니다. ref: {path from .git}.이 명령은 해당 내용을 읽고 "ref:"라고 말하고 그것이 가리키는 파일을 읽습니다.

물론 이것은 HEAD가 "ref:..."가 아니라 해시 자체이기 때문에 분리된 헤드 모드에서는 실패할 것입니다. 하지만 아시다시피, 저는 여러분이 bash 모드에서 그렇게 많은 스마트함을 기대하지 않는다고 생각합니다. -라이너.세미콜론이 부정행위라고 생각하지 않는다면...

HASH="ref: HEAD"; while [[ $HASH == ref\:* ]]; do HASH="$(cat ".git/$(echo $HASH | cut -d \  -f 2)")"; done; echo $HASH

조금 더 다른 것이 필요했습니다. 커밋의 전체 SHA1을 표시하지만 작업 디렉토리가 깨끗하지 않으면 별표를 끝까지 추가하십시오. 여러 명령을 사용하고 싶지 않으면 이전 답변의 옵션 중 어느 것도 작동하지 않습니다.

다음은 다음과 같은 라이너입니다.
git describe --always --abbrev=0 --match "NOT A TAG" --dirty="*"
결과: f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe*

설명 : 현재 커밋을 (주석이 달린 태그 사용) 설명하지만 "태그가 아님"을 포함하는 태그 만 설명합니다. 태그는 공간을 가질 수 없기 때문에 태그와 일치하지 않으며 결과를 보여주고 싶기 때문에 --always, 명령이 전체를 표시하여 뒤로 떨어집니다 (--abbrev=0) 커밋의 SHA1 및 작업 디렉토리가있는 경우 별표가 추가됩니다. --dirty.

별표를 추가하지 않으려면 이전 답변에서 다른 모든 명령과 마찬가지로 작동합니다.
git describe --always --abbrev=0 --match "NOT A TAG"
결과: f5366ccb21588c0d7a5f7d9fa1d3f85e9f9d1ffe

git show-ref --head --hash head

그래도 속도를 원한다면 Deestan이 언급 한 접근법

cat .git/refs/heads/<branch-name>

지금까지 여기에 나열된 다른 방법보다 훨씬 빠릅니다.

다음은 GIT 파일에서 직접 읽는 것을 사용하여 Bash Shell의 1 라이너입니다.

(head=($(<.git/HEAD)); cat .git/${head[1]})

git 루트 폴더에서 위 명령을 실행해야합니다.

이 방법은 저장소 파일에 유용 할 수 있지만 git 명령이 설치되지 않았습니다.

작동하지 않는 경우 체크인하십시오 .git/refs/heads 폴더 어떤 헤드가 있는지 폴더.

홈 디어 파일 ".gitconfig"다음을 추가하십시오.

[alias]
sha = rev-parse HEAD

그러면 더 쉬운 명령을 기억할 것입니다.

$ git sha
59fbfdbadb43ad0b6154c982c997041e9e53b600

다음은 또 다른 직접 액세스 구현입니다.

head="$(cat ".git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(cat ".git/${head#ref: }")"
done

이것은 또한 로컬 패키지 아카이브에 유용한 HTTP에서도 작동합니다 (알고있는 : 공개 웹 사이트의 경우 .git 디렉토리에 액세스 할 수 있도록 권장하지 않습니다).

head="$(curl -s "$baseurl/.git/HEAD")"
while [ "$head" != "${head#ref: }" ]; do
  head="$(curl -s "$baseurl/.git/${head#ref: }")"
done

다음은 다음과 같이하는 또 다른 방법이 있습니다 :)

git log | grep -o '\w\{8,\}' | head -n 1

Commit 해시를 사용하여 저에게 효과가있는 단계는 다음과 같습니다.

  1. 예를 들어 Git Hub 링크에 로그온하십시오. https://github.<xyz.abc>.com
  2. 로그인하면 "검색 또는 점프로 ..."텍스트 상자에서 다음과 같이 입력하십시오.

    hash:<GIT COMMIT HASH>
    
  3. 귀하의 필요에 따라 "모든 Github Enterprise"또는 "이 조직에서"를 선택하십시오.

  4. Enter를 누르십시오.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top