0

我已经阅读了 git-rev-parse 的手册页,但仍然不知道该命令的作用。假设我有一个结构如下的 git 项目:

MyProject
├── Folder1
├── Folder2
├── .git

如果我跑

git-rev-parse 头

然后我可以获得与我上次提交相同的 SHA_1。很简单。

但是,如果我运行

git-rev-parse 头:文件夹 1

然后我得到另一个与我曾经提交的任何 SHA 不同的 SHA_2。我的问题是:这个“git-rev-parse HEAD:Folder1”是什么意思,这个 SHA_2 是什么?

4

2 回答 2

5

看看文档

<rev>:<path>, e.g. HEAD:README, master:./README

后缀 : 后跟一个路径,在冒号之前的部分命名的树状对象中的给定路径处命名 blob 或树。以 ./ 或 ../ 开头的路径是相对于当前工作目录的。给定的路径将被转换为相对于工作树的根目录。这对于从与工作树具有相同树结构的提交或树中寻址 blob 或树最有用。

这意味着它不会获得 commit/tag/branch/... 的哈希值,但它会获得 commit/tag/branch/... 中目录/文件的哈希值。

因此,意味着在 ref (签出状态)git-rev-parse HEAD:Folder1中获取目录的树对象的 SHA 哈希。Folder1HEAD

于 2021-05-31T14:35:04.290 回答
1

commit:path/to/file描述特定提交处的文件(“BLOB”)。例如在 git.git 存储库中:

$ git rev-parse v2.31.1:git.c
9bc077a025cba4c5b3628b0eabb4d3aac0f35c63
$ git cat-file -t 9bc077a025cba4c5b3628b0eabb4d3aac0f35c63
blob
$ git cat-file -p 9bc077a025cba4c5b3628b0eabb4d3aac0f35c63 | head
#include "builtin.h"
#include "config.h"
#include "exec-cmd.h"
#include "help.h"
#include "run-command.h"
#include "alias.h"
#include "shallow.h"

#define RUN_SETUP       (1<<0)
#define RUN_SETUP_GENTLY    (1<<1)

您可以在手册页的Specifying Revisions部分下找到解释:rev-parse

   <rev>:<path>, e.g. HEAD:README, master:./README
       A suffix : followed by a path names the blob or tree at the given
       path in the tree-ish object named by the part before the colon. A
       path starting with ./ or ../ is relative to the current working
       directory. The given path will be converted to be relative to the
       working tree’s root directory. This is most useful to address a blob
       or tree from a commit or tree that has the same tree structure as the
       working tree.

当然,path/to/file可能是一个目录,在这种情况下,输出哈希将指向一个对象。

于 2021-05-31T14:33:58.383 回答