使用 rev-parse 窥视你的 Git 仓库

如果你编写大量的 Git 钩子或者在脚本中大量使用 Git,那么 rev-parse 可能是你一直想要却不知道自己想要的子命令。
2 位读者喜欢这篇文章。
Person using a laptop

我经常使用 Git。 事实上,可能会有人认为我有时会滥用它。 我使用 Git 来驱动一个扁平文件 CMS,一个 网站,甚至我的 个人日历

为了滥用 Git,我编写了大量的 Git 钩子。 我最喜欢的 Git 子命令之一是 rev-parse,因为当你在使用 Git 编写脚本时,你需要 关于你的 Git 仓库的信息,和你需要 来自它的信息一样频繁。

获取顶层目录

对于 Git 来说,没有比它自己的顶层文件夹更靠后的目录了。 这在一定程度上使得将 Git 目录从你的电脑移动到 U 盘或服务器而不会损失功能成为可能。

Git 只知道包含隐藏的 .git 目录和其下任何被跟踪的文件夹的目录。 --show-toplevel 选项显示你当前 Git 仓库的根目录。 至少对于 Git 来说,这是所有事情开始的地方。

这是一个你可能会如何使用它的明显例子

$ cd ~/example.git
$ git rev-parse --show-toplevel
/home/seth/example.git

当你位于 Git 仓库的更深层级时,它会变得更加有用。 无论你在仓库中漫游到哪里,rev-parse --show-toplevel 总是知道你的根目录

$ cd ~/example.git/foo/bar/baz
$ git rev-parse --show-toplevel
/home/seth/example.git

以类似的方式,你可以获取一个指针,指向是什么使得该目录成为顶层目录:隐藏的 .git 文件夹。

$ git rev-parse --git-dir
/home/seth/example.com/.git

找到回家的路

--show-cdup 选项会告诉你(或者更可能是你的脚本)如何从你当前的工作目录到达顶层目录。 这比试图逆向工程 --show-toplevel 的输出要容易得多,并且比希望 shell 有 pushdpopd 更具有可移植性。

$ git rev-parse --show-cdup
../../..

有趣的是,如果你想的话,你可以欺骗 --show-cdup。 使用 --prefix 选项来伪造你从中进行查询的目录

$ cd ~/example.git/foo/bar/baz
$ git rev-parse --prefix /home/seth/example.git/foo --show-cdup
../

当前位置

如果你需要确认命令是从哪里执行的,你可以使用 --is-inside-work-tree--is-inside-git-dir 选项。 这些选项基于当前工作目录返回一个布尔值

$ pwd
.git/hooks
$ git rev-parse --is-inside-git-dir
true

$ git rev-parse --is-inside-work-tree
false

Git 脚本

rev-parse 子命令是实用的。 大多数人不太可能每天都需要它。 但是,如果你编写大量的 Git 钩子或者在脚本中大量使用 Git,那么它可能是你一直想要却不知道自己想要的 Git 子命令。

下次你在脚本中调用 Git 时尝试使用它。

接下来阅读什么
标签
Seth Kenlon
Seth Kenlon 是一位 UNIX 极客、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。 他曾在电影和计算机行业工作,通常是同时进行。

1 条评论

惊人的大量有益信息

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.