Как найти соответствующее дерево ha sh и blob ha sh фиксации? - PullRequest
2 голосов
/ 01 августа 2020

Я изучаю git и знаю, что каждая фиксация указывает на дерево, которое, в свою очередь, указывает на соответствующие капли. При выполнении фиксации git я вижу, что создается идентификатор фиксации. Но как мне найти соответствующее дерево ha sh и blob (ы) ha sh, связанные с фиксацией?

Спасибо за ваш ответ.

Ответы [ 4 ]

4 голосов
/ 01 августа 2020

Вы можете использовать git cat-file -p для различных типов объектов.

git -cat-file - Предоставляет информацию о содержимом или типе и размере для объектов репозитория ... -п Распечатайте содержимое <object> в зависимости от его типа.

Вот пример.

В моем репозитории самая верхняя фиксация выглядит так:

❯ git lg -1
* 87ffcaa: (7 weeks ago) Updated all packages (HEAD -> develop, origin/develop)
| Lasse Vågsæther Karlsen <lasse@vkarlsen.no> (Tue, 16 Jun 2020 12:30:21 +0200)

Чтобы просмотреть содержимое этого коммита, я могу выполнить следующее:

❯ git cat-file -p 87ffcaa
tree dedfc8120583a89936cacf2e55c5db1d6d532129
parent def5a89a442d0ec88243a43ca9c9fef493dbf4c6
author Lasse Vågsæther Karlsen <lasse@vkarlsen.no> 1592303421 +0200
committer Lasse Vågsæther Karlsen <lasse@vkarlsen.no> 1592303421 +0200

Updated all packages

Теперь, если я хочу увидеть дерево, на которое оно ссылается:

❯ git cat-file -p dedfc8120583a89936cacf2e55c5db1d6d532129
100644 blob 9a277a1791951e14c235243bcf374ee2d01e27b9    .editorconfig
100644 blob 1ff0c423042b46cb1d617b81efb715defbe8054d    .gitattributes
100644 blob 304b515a2ae6795ef7c73c6f0d1e822fcefd66b3    .gitignore
040000 tree 74fd33ec96af2b083e9367448bd6f6786e8b4d47    ConsoleSandbox
100644 blob e47b11709137791b3c1241092b3d5215df834ad3    LICENSE
100644 blob 2f2aaad1b5662e3d3e33398c6ce29106d0fbdcac    LVK.sln
100644 blob 9ec3d74ae05f906457f6a60ffa2df78a070ffabb    LVK.sln.DotSettings
100644 blob a1f9a1de838feeec888ab34bf35a998ade9c3560    README.md
040000 tree 759ef337f68ec31f0ca035f9427f309e87765030    SolutionQualityAssuranceTests
...

и если я хочу чтобы увидеть там одну из настоящих капель, например этот файл ЛИЦЕНЗИИ:

❯ git cat-file -p e47b11709137791b3c1241092b3d5215df834ad3
MIT License

Copyright (c) 2018 Lasse Vågsæther Karlsen

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
...

Вы также можете копаться в подпапках с этим. В приведенном выше дереве есть эта строка ниже:

040000 tree 408c62b058b6f4b14f65188d492ec452f0bb6e1d    src

, которая является подпапкой. Таким же образом я могу показать дерево, на которое ссылаются:

❯ git cat-file -p 408c62b058b6f4b14f65188d492ec452f0bb6e1d
100644 blob af6a33f6fe9f8f35d7d070fa16be01319df801bd    Directory.Build.props
040000 tree 9a8adfce1ccb494689fd6710369c1f925fa8acbf    LVK.AppCore.Console
040000 tree 4054753cad506b9a0132c72becd906b388bc8e59    LVK.AppCore.Windows.Forms
...

и так далее.

2 голосов
/ 01 августа 2020

Чтобы узнать, в какой именно ha sh разрешается любое выражение ревизии, используйте git rev-parse, имя которого намекает на его полное назначение, в качестве полного набора инструментов синтаксического анализа параметров и аргументов для Git -расширяющих команд.

См. git revisions для всех способов, которыми вы можете указать вещи, которые разрешаются в Git id.

Их много, потому что while Git ' Базовая структура (почти невероятно) проста, количество вещей, которые можно (и требований разработки) с ней сделать, бесконечно и головокружительно, и есть много удобств, чтобы сделать вспомогательные рабочие процессы более конкретными. , ну, удобно.

Если somecommit относится к фиксации или тегу, somecommit: относится к (помеченному) дереву фиксации, как и somecommit^{tree} для тех случаев, когда голый : может будут пропущены при проверке.

Следующий за : синтаксис обычно является синтаксисом «получить меня к дереву» (ведущий : - «получить меня до индекса»).

To перечислите дерево, используйте git ls-tree. Краткий структурный обзор, например, git ls-tree -rd @:

Чтобы перечислить индекс, git ls-files, который имеет множество удобных опций; это в основном швейцарский армейский нож списка файлов с индексированием, или, возможно, вся швейцарская армия, может быть, это просто я являюсь крохотной гиперболизацией c.

Итак, если somecommit:path/to/file - это то, что указано в этом совершить по этому пути, :path/to/file - это все, что указано в вашем индексе по этому пути. Там еще много всего, см. Эту ссылку.

И поскольку somecommit: называет какое-то дерево коммитов, git rev-parse somecommit: покажет вам его идентификатор; :path/to/file именует запись индекса для этого пути, git rev-parse :path/to/file покажет вам идентификатор содержимого в этой записи.

¹ Для слияния в полете Git сохраняет три записи, по одной для каждого из базового, нашего и их содержимого, поэтому вы и ваши инструменты, включая собственное автоматическое слияние Git, можете изучить различия. , в конечном итоге добавив правильный результат и обновив главную запись индекса. Git несколько загадочно называет эти «этапы», и вы можете ссылаться на них явно с помощью :1:path/to/file и аналогично для 2 и 3. Основная запись - этап 0.

2 голосов
/ 01 августа 2020

Надеюсь, это поможет:

blob - объект, используемый для хранения содержимого одного файла.

tree - объект, который содержит ссылки на другие blob-объекты или поддеревья.

commit - объект, который содержит ссылку на другой объект дерева

Объекты фиксации относятся к объекту дерева, который ссылается на blob или другие объекты поддерева

  • древовидное представление коммиты git log --graph --oneline --all

  • показывает различные типы объектов (капли, деревья, теги и коммиты) git show <object>

  • перечисляет содержимое заданный объект дерева git ls-tree <object>

  • просмотреть содержимое, тип объектов (COMMIT в вашем случае) git cat-file -p <SHA_OF_ COMMIT_OBJECT>

0 голосов
/ 01 августа 2020

Рекомендую прочитать Git -Internals- Git -Objects . Я считаю, что он должен ответить на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...