Что такое 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", и как они
отличаются друг от друга?

489   2  
git

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 отслеживает исходный код, используя четыре основных объекты:

  1. аннотированные теги, которые указывают на коммиты.
  2. совершает, которые указывают на корневое дерево каталогов вашего проекта.
  3. деревья, которые являются каталогами и подкаталогами.
  4. Blob-объекты, которые представляют собой файлы.

каждый из этих объектов имеет свой собственный хэш-идентификатор sha1, так как Линус Торвальдс разработал ГИТ как content-addressable файловая система, т. е. файлы могут быть получены на основе их содержимого (идентификаторы sha1 генерируются из содержимого файла). Про ГИТ книга дает в этом примере диаграмма:

Figure 9-3 from Pro Git book

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

  1. <rev>:<path>, что приводит напрямую к деревьям каталогов, не совершать объекты. Например, HEAD:subdirectory.

  2. в SHA1 идентификаторы дерево каталогов объекты.

Примечание Для неродного английского языка [sic!] speakers: "- ish " - это суффикс, который может быть применен к прилагательному, чтобы указать "иметь такие качества, как" или "немного" - см. http://chambers.co.uk/search/?query=ish&title=21st

отсюда "дерево-иш "- как" дерево".... "коммит-иш" - как "фиксация"

например, "Марс выглядит как красноватая звезда" ("d" удваивается !); "еда на тарелке была не горячая, а теплая"

Я считаю, что это помогает объяснить "что такое ..."лучше, в том, что это объясняет использование языка.

Comments

    Ничего не найдено.