我经常使用 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 有 pushd
和 popd
更具有可移植性。
$ 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 时尝试使用它。
1 条评论