깃에서 커밋식과 트리식은 무엇입니까?
더 퀘스천
깃에서 커밋-ish와 트리-ish의 구체적인 예는 무엇입니까?
스택 오버플로 질문 "tree-ish의 의미는 무엇입니까?"는 tree-ish를 구체적으로 다루지만, 두 가지 모두에 대해 더 자세히 알고 싶습니다.
배경
설명서의 사용법
Git 문서에서는 "commit-ish"와 "tree-ish"를 여러 가지로 언급하고 있습니다.예를 들어 Git 소스 코드를 검사하는 경우:
$ git grep --files-with-matches --extended-regexp "commit(-)*ish"
config.txt
git-describe.txt
git-fast-import.txt
git-name-rev.txt
git-push.txt
git-rebase.txt
git-rev-parse.txt
git.txt
gitcli.txt
glossary-content.txt
howto/revert-branch-rebase.txt
revisions.txt
그리고.
$ git grep --files-with-matches --extended-regexp "tree(-)*ish" | \
$ grep --invert-match RelNotes
diff-format.txt
diff-generate-patch.txt
git-archive.txt
git-cat-file.txt
git-checkout.txt
git-diff-index.txt
git-diff-tree.txt
git-ls-files.txt
git-ls-tree.txt
git-merge-tree.txt
git-read-tree.txt
git-reset.txt
git-svn.txt
git.txt
gitcli.txt
gittutorial-2.txt
glossary-content.txt
revisions.txt
정의들
Git 문서는 "commit-ish"와 "tree-ish"가 무엇인지 정의합니다.
<tree>
트리 개체 이름을 나타냅니다.
<commit>
커밋 개체 이름을 나타냅니다.
<tree-ish>
트리, 커밋 또는 태그 개체 이름을 나타냅니다.할는ast을 취하는 명령어
<tree-ish>
은로에하기를다하기를anoem로은a에y<tree>
but dereferences로를다만다t를만t으로<commit>
그리고.<tag>
는들를ta을 가리키는<tree>
.<commit-ish>
커밋 또는 태그 개체 이름을 나타냅니다.할는ast을 취하는 명령어
<commit-ish>
은로에하기를다하기를anoem로은a에y<commit>
but dereferences로를다만다t를만t으로<tag>
는들를ta을 가리키는<commit>
.
설명서가 충분히 명확하지 않습니다.
위의 문서에서 "커밋적"과 "트리적"이 무엇인지 정의하고 있지만, 저는 여전히 그것이 너무 모호하고 명확하지 않다고 생각합니다.
"commit-ish"와 "tree-ish"의 구체적인 예는 무엇이며 서로 어떻게 다른가요?
단답형(TL;DR)
다음은 (Git 리비전 문서에서) 커밋 방식 식별자와 트리 방식 식별자의 전체 목록입니다.
----------------------------------------------------------------------
| Commit-ish/Tree-ish | Examples
----------------------------------------------------------------------
| 1. <sha1> | dae86e1950b1277e545cee180551750029cfe735
| 2. <describeOutput> | v1.7.4.2-679-g3bee7fb
| 3. <refname> | master, heads/master, refs/heads/master
| 4. <refname>@{<date>} | master@{yesterday}, HEAD@{5 minutes ago}
| 5. <refname>@{<n>} | master@{1}
| 6. @{<n>} | @{1}
| 7. @{-<n>} | @{-1}
| 8. <refname>@{upstream} | master@{upstream}, @{u}
| 9. <rev>^ | HEAD^, v1.5.1^0
| 10. <rev>~<n> | master~3
| 11. <rev>^{<type>} | v0.99.8^{commit}
| 12. <rev>^{} | v0.99.8^{}
| 13. <rev>^{/<text>} | HEAD^{/fix nasty bug}
| 14. :/<text> | :/fix nasty bug
----------------------------------------------------------------------
| Tree-ish only | Examples
----------------------------------------------------------------------
| 15. <rev>:<path> | HEAD:README.txt, master:sub-directory/
----------------------------------------------------------------------
| Tree-ish? | Examples
----------------------------------------------------------------------
| 16. :<n>:<path> | :0:README, :README
----------------------------------------------------------------------
식별자 #1-14는 모두 커밋으로 이어지기 때문에 모두 "커밋-ish"이지만 커밋은 디렉토리 트리를 가리키기 때문에 결국 모두 (하위) 디렉토리 트리 개체로 이어지므로 "트리-ish"로도 사용할 수 있습니다.
#15는 (서브) 디렉토리를 지칭할 때 트리시(tree-ish)로 사용될 수도 있지만 특정 파일을 식별하는 데 사용될 수도 있습니다.파일을 언급할 때 여전히 "나무 같은" 것으로 간주되는지 아니면 "블롭 같은"(Git은 파일을 "블롭"으로 지칭함)처럼 행동하는지 잘 모르겠습니다.
긴 대답
깃의 커밋 및 디렉토리 트리
가장 낮은 수준에서 깃은 네 가지 기본 객체를 사용하여 소스 코드를 추적합니다.
- 주석이 달린 태그로, 커밋을 가리킵니다.
- 프로젝트의 루트 디렉터리 트리를 가리키는 커밋입니다.
- 트리, 디렉토리 및 하위 디렉토리입니다.
- 블롭, 파일입니다.
Linus Torvalds가 Git을 콘텐츠 주소 지정 가능한 파일 시스템처럼 설계했기 때문에, 이러한 각 개체는 고유한 sha1 해시 ID를 가지고 있습니다. 즉, 파일을 콘텐츠에 기반하여 검색할 수 있습니다(sha1 ID는 파일 콘텐츠에서 생성됨).Pro Git 책은 다음과 같은 예시도를 제공합니다.
커밋식 대 트리식
수많은 Git 명령어들은 커밋과 (서브) 디렉토리 트리에 대한 특별한 식별자를 받아들일 수 있습니다.
"커밋-ish"는 궁극적으로 커밋 개체로 이어지는 식별자입니다.예를들면,
tag -> commit
"Tree-ish"는 궁극적으로 트리(즉, 디렉토리) 개체로 이어지는 식별자입니다.
tag -> commit -> project-root-directory
커밋 개체는 항상 디렉터리 트리 개체(프로젝트의 루트 디렉터리)를 가리키기 때문에 "커밋-ish"인 식별자는 정의상 "트리-ish"이기도 합니다.다시 말해, 커밋 개체로 연결하는 모든 식별자는 (하위) 디렉토리 트리 개체로 연결하는 데 사용될 수도 있습니다.
그러나 디렉터리 트리 개체는 Git의 버전 시스템에서 커밋을 가리키는 경우가 없기 때문에, (하위) 디렉터리 트리를 가리키는 모든 식별자가 커밋을 가리키는 데에도 사용될 수 있는 것은 아닙니다.즉, "커밋-ish" 식별자 집합은 "트리-ish" 식별자 집합의 엄격한 부분 집합입니다.
커밋-ish로 사용할 수 없는 트리-ish 식별자 집합은 다음과 같습니다.
<rev>:<path>
, 커밋 오브젝트가 아닌 디렉토리 트리로 직접 연결됩니다.예를들면,HEAD:subdirectory
.디렉토리 트리 개체의 Sha1 식별자입니다.
영어를 사용하지 않는 사람들을 위한 참고 [sic!]: "-ish"는 형용사에 "예를 들어" 또는 "예를 들어"를 나타내기 위해 적용될 수 있는 접미사입니다 - http://chambers.co.uk/search/ ?query=ish"21위 참조
그래서 "나무 같은" - "나무 같은"..."commitish" - "commit"처럼
예를 들어 "화성은 불그스름한 별처럼 보인다" ("d"는 두 배이다!); "접시에 있는 음식은 뜨겁지 않았지만 따뜻했습니다."
언어 사용법을 설명한다는 점에서 "무엇이..."을 더 잘 설명하는 데 도움이 된다고 생각합니다.
언급URL : https://stackoverflow.com/questions/23303549/what-are-commit-ish-and-tree-ish-in-git
'programing' 카테고리의 다른 글
모바일 Safari에서 클릭 이벤트 시 300ms 지연 제거 (0) | 2023.09.09 |
---|---|
Paginated API가 적용된 Spring Rest Template (0) | 2023.09.09 |
dd/mm/yyyy 문제를 정렬할 수 있는 날짜 (0) | 2023.09.09 |
MySQL의 상관된 하위 쿼리에서 메인 where stmt에 "column"을 포함할 수 없음 (0) | 2023.09.09 |
봄에 일정이 겹치지 않게 하는 방법은? (0) | 2023.09.09 |