Что такое commit-ish и tree-ish в Git?
Вопрос
каковы конкретные примеры фиксации и дерева в Git?
вопрос переполнения стека " что означает tree-ish в git?" предложения
с деревом-иш конкретно, но я хочу понять больше о и.
фон
использование в документации
документация Git делает несколько ссылок на " commit-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>
указывает имя объекта дерева, фиксации или тега. Команда принимает
<tree-ish>
аргумент в конечном счете хочет работать на<tree>объект, но автоматически
разыменования<commit>и<tag>объекты, которые указывают на<tree>.
<commit-ish>
указывает имя объекта фиксации или тега. Команда, которая принимает
<commit-ish>
аргумент в конечном счете хочет работать на<commit>объект, но автоматически
разыменования<tag>объекты, которые указывают на<commit>.
документация недостаточно ясна
даже хотя документация выше определяет, что такое "commit-ish" и " tree-ish,
Я все еще нахожу его слишком расплывчатым и неясным.
каковы конкретные примеры " commit-ish "и" tree-ish", и как они
отличаются друг от друга?
2 ответов:
короткий ответ (TL;DR)
вот полный список идентификаторов commit-ish и tree-ish (от ЖКТ ревизионная документация):
---------------------------------------------------------------------- | 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 все "commit-ish", потому что все они приводят к коммитам, но поскольку коммиты также указывают на деревья каталогов, все они в конечном итоге приводят к (sub)объекты дерева каталогов, и поэтому может также использоваться как "дерево-иш".
#15 также может быть использован в качестве дерева-иш, когда он относится к a (sub)каталог, но это может также использоваться для идентификации конкретных файлов. Когда это относится к файлам, я не конечно, если он все еще считается "древовидным", или если действует больше как "blob-ish" (Git относится к файлам, как "кляксы").
Длинный Ответ
коммиты и деревья каталогов в Git
на самых низких уровнях Git отслеживает исходный код, используя четыре основных объекты:
- аннотированные теги, которые указывают на коммиты.
- совершает, которые указывают на корневое дерево каталогов вашего проекта.
- деревья, которые являются каталогами и подкаталогами.
- Blob-объекты, которые представляют собой файлы.
каждый из этих объектов имеет свой собственный хэш-идентификатор sha1, так как Линус Торвальдс разработал ГИТ как content-addressable файловая система, т. е. файлы могут быть получены на основе их содержимого (идентификаторы sha1 генерируются из содержимого файла). Про ГИТ книга дает в этом примере диаграмма:
Commit-ish vs Tree-ish
многие команды Git могут принимать специальные идентификаторы для коммитов и (sub)каталога деревья:
"Commit-ish" - это идентификаторы, которые в конечном итоге приводят к объекту фиксации. Например,
tag -> commit"Tree-ish" - это идентификаторы, которые в конечном итоге приводят к дереву (т. е. каталогу) объекты.
tag -> commit -> project-root-directoryпотому что объекты фиксации всегда указывают на объект дерева каталогов (корень каталог вашего проекта), любой идентификатор, который является "commit-ish" является, by определение "дерево-иш". Другими словами,любой идентификатор, который приводит к объект commit также может использоваться для приведения к объекту дерева каталогов (sub).
но поскольку объекты дерева каталогов никогда не указывают на коммиты в Git это управление версиями система, не каждый идентификатор, который указывает на дерево каталогов (sub)также может быть используется для фиксации. Другими словами,набор идентификаторов" commit-ish" является строгим подмножеством набора идентификаторов" tree-ish".
набор древовидных идентификаторов, которые не может использоваться как commit-ish are
<rev>:<path>, что приводит напрямую к деревьям каталогов, не совершать объекты. Например,HEAD:subdirectory.в SHA1 идентификаторы дерево каталогов объекты.
Примечание Для неродного английского языка [sic!] speakers: "- ish " - это суффикс, который может быть применен к прилагательному, чтобы указать "иметь такие качества, как" или "немного" - см. http://chambers.co.uk/search/?query=ish&title=21st
отсюда "дерево-иш "- как" дерево".... "коммит-иш" - как "фиксация"
например, "Марс выглядит как красноватая звезда" ("d" удваивается !); "еда на тарелке была не горячая, а теплая"
Я считаю, что это помогает объяснить "что такое ..."лучше, в том, что это объясняет использование языка.

Comments