git rev-parse는 무엇을합니까?


282

무엇을 git rev-parse합니까?

맨 페이지를 읽었지만 답변보다 더 많은 질문을 제기했습니다. 같은 것들:

매개 변수 선택 및 마사지

마사지 ? 그게 무슨 뜻이야?

수정 자 지정자의 리졸버 (SHA1로)를 사용하고 있습니다.

git rev-parse HEAD^

또는

git rev-parse origin/master

이것이 명령의 목적입니까? 그렇지 않으면 이것을 달성하기 위해 그것을 사용하는 것이 맞습니까?


3
맨 페이지에서 볼 수있는 한, 다른 명령에 대한 개정 / 개체 이름을 구문 분석하는 것은 주로 내부 유틸리티입니다. 당신이하고있는 일은 rev-parse명령 의 목적과 거의 같습니다 . 또한 실제 프로그램이 Git의 복잡한 객체 이름 구문을 이해할 필요가 없도록 명령 줄을 정규화하는 데 사용할 수도 있습니다 git rev-parse. 실제 프로그램이 호출됩니다).


60
의 매뉴얼 페이지 git rev-parse는 이해할 수 없을 정도로 이해할 만하다. 나는 5 년이 지난 후에도 그 전문 용어를 사람이 읽을 수있는 것으로 다시 쓰려고하지 않았다는 사실에 놀랐습니다.
not2qubit

@ not2qubit Me : '분명히 감사합니다. 열등감을 느꼈습니다.' Linus Torvalds : '정확히 읽지 않은 부분은 무엇입니까?'
Brain2000

답변:


245

git rev-parseplumbing주로 조작에 사용되는 보조 명령입니다.

한 가지 일반적인 사용법은 git rev-parse개정 지정자가 지정된 SHA1 해시를 인쇄하는 것입니다. 또한 --short더 짧은 고유 SHA1 인쇄 와 같이이 출력을 형식화하는 다양한 옵션이 있습니다 .

내가 사용한 다른 유스 케이스 (스크립트 및 git 위에 빌드 된 기타 도구)도 있습니다.

  • --verify 지정된 객체가 유효한 git 객체인지 확인하십시오.
  • --git-dir.git디렉토리 의 abs / 상대 경로를 표시합니다 .
  • 현재 저장소를 사용 --is-inside-git-dir하거나 작업 트리를 사용하여 저장소에 있는지 확인--is-inside-work-tree
  • 리포지토리가 베어인지 확인 --is-bare-repository
  • SHA1 분기 (인쇄의 해시 --branches(), 태그 --tags)와 심판도 여과 원격에 기초 할 수있다 (사용 --remote)
  • --parse-opt스크립트에서 인수를 정규화하고 (와 비슷한 종류 getopt) 및 함께 사용할 수있는 출력 문자열을 인쇄eval

Massage단지 한 형태에서 다른 형태, 즉 변형 명령으로 정보를 변환 할 수 있음을 의미합니다. 이것들은 내가 생각할 수있는 몇 가지 빠른 예입니다.

  • 커밋의 SHA1에 분기 또는 태그 이름을 지정하여 커밋에 대한 SHA1 값만 허용하는 배관 명령으로 전달 될 수 있도록합니다.
  • 개정의 범위 A..B에 대한 git log또는 git diff하부 배관 용 명령과 등가로 인수B ^A

102

명령 이름의 어원에 대해 자세히 설명하기 위해 rev-parseGit rev은 배관 명령 의 용어 를 "수정"의 약어로 일관되게 사용 하며 일반적으로 커밋의 40 자 SHA1 해시를 의미합니다. rev-list예를 들어이 명령 은 분기 등에 대한 40 자 커밋 해시 목록을 인쇄합니다.

이 경우 이름이로 확장 될 수 있습니다 parse-a-commitish-to-a-full-SHA1-hash. 이 명령에는 Tuxdude의 답변에 언급 된 몇 가지 보조 기능이 있지만 이름은 분기 이름이나 약식 해시와 같은 사용자 친화적 인 참조를 많은 프로그래밍 / 배관에 가장 유용한 모호하지 않은 40 자 SHA1 해시로 변환하는 유스 케이스 인 것처럼 보입니다. 목적.

나는 그것이 그것을 이해하기 전에 "역 분석"이라고 생각하고 "마사지"와 "조작"이라는 용어를 이해하는 데 같은 문제가 있다고 생각한다는 것을 안다. :)

어쨌든, 나는이 "수정에 대한 분석"개념은 그것을 생각하기에 만족할만한 방법이며, 그런 종류의 일이 필요할 때이 명령을 명심할 수있는 믿을만한 개념을 발견합니다. 스크립팅 Git에서 자주 사용자 친화적 인 커밋 참조를 사용자 입력으로 사용하고 일반적으로 가능한 한 빨리 확인 후 명확하고 모호하지 않은 작업 참조로 확인하려고합니다. 그렇지 않으면 입력 번역 및 유효성 검사가 스크립트를 통해 확산되는 경향이 있습니다.


9
설명 주셔서 감사합니다, 나는 git-docs를 조금 이해하지 못했습니다 : git-scm.com/docs/git-rev-parse
Jacob McKay

당신은 우리의 예를 제공 할 수 있습니다 messagingmanipulation이전에에 암시로?
보 첸

5
즉,의 git rev-parse줄임말입니다 git revision-parse. 주어진 입력을 받아 해당 40 자 개정 ID를 리턴합니다.
Jonathan Benn

36

git rev-parse--abbrev-ref 플래그를 사용하여 현재 분기 이름을 가져 오는 데에도 사용됩니다 .

git rev-parse --abbrev-ref HEAD

이런 식으로 커밋 메시지를 얻는 것이 가능합니까?
Leo Droidcoder

2
@LeoDroidcoder trygit log --format=%B -n 1 <revision>
hipyhop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.