git rev-parse --git-path hooks总是返回绝对路径

时间:2017-06-30 22:40:44

标签: git bash shell git-submodules githooks

是否有相同的命令始终返回绝对路径?

git rev-parse --git-path hooks

当我在子模块中时,我得到一个绝对路径,但是当我在根存储库中时,我得到了

  

的.git /钩

2 个答案:

答案 0 :(得分:2)

Git v2.13.0有--absolute-git-dir

$ git rev-parse --absolute-git-dir
/Users/torek/...snip.../.git

但不是--absolute-git-path,正如您所注意到的,--git-path会产生相对结果:

$ git rev-parse --git-path hooks
.git/hooks

如果你有Git 2.13,你可以使用sh / bash环境变量前缀方法组合这些:

$ GIT_DIR=$(git rev-parse --absolute-git-dir) git rev-parse --git-path hooks
/Users/torek/...[snip].../.git/hooks

如果不是 - 如果您的Git超过2.13 - 您可以使用readlink -f

$ GIT_DIR=$(readlink -f $(git rev-parse --git-dir)) git rev-parse --git-path hooks
/home/vagrant/...snip.../.git/hooks

(在我的笔记本电脑上的某个Linux映像中;这个特定的Linux映像安装了Git 2.7.4。)

答案 1 :(得分:0)

在 Git 2.31(2021 年第 1 季度)中,可以明确告知“git rev-parse(man) 将输出作为绝对路径或相对路径,并带有 {{1} } 选项。

因此,如果您想确定并拥有绝对路径:

--path-format=(absolute|relative)

commit fac60b8commit be6e0da(2020 年 12 月 13 日),作者 brian m. carlson (bk2204)
(于 2021 年 1 月 15 日在 Junio C Hamano -- gitster --commit 9ba366f 合并)

<块引用>

rev-parse:添加绝对或相对路径格式的选项

签字人:brian m.卡尔森

<块引用>

git rev-parse(man) 有几个选项可以打印不同的路径。
其中一些路径是相对于当前工作目录打印的,一些是绝对路径。

通常,这不是问题,但有时人们希望路径完全采用一种或另一种格式。
如果路径是规范的,这可以很容易地完成,但在某些缺少 realpath(1) 的 shell 脚本环境和 Go 中无法规范路径,Go 缺少在 Windows 上正确规范路径的函数。

为了帮助脚本编写者,让我们提供一个选项,将 git rev-parse --path-format=absolute --git-path hooks 打印的大多数路径转换为相对于当前工作目录或绝对和规范的路径。
记录哪些选项受到影响,哪些不受影响,以免用户混淆。

这种方法比提供相对或绝对的现有选项的副本更干净、更整洁。

请注意,如果用户需要两种形式,则可以在命令行中间传递一个附加选项,以更改后续操作的行为。

git rev-parse 现在包含在其 man page 中:

<块引用>

git rev-parse

控制某些其他选项的行为。

  • 如果指定为绝对路径,这些选项打印的路径将是绝对和规范的。
  • 如果指定为相对路径,则如果可能,路径将相对于当前工作目录。
    默认为特定于选项。

这个选项可以被多次指定并且只影响那些 在命令行上跟随它,到命令行的末尾或下一个 此选项的实例。

以下选项由 --path-format=(absolute|relative) 修改:

--path-format 现在包含在其 man page 中:

<块引用>

git rev-parse

显示顶级目录的(默认为绝对)路径 工作树。
如果没有工作树,则报错。

--show-toplevel 现在包含在其 man page 中:

<块引用>

以下选项不受git rev-parse的影响:

--path-format

--absolute-git-dir,但它的输出总是规范化的 绝对路径。

--git-dir

当前工作目录在仓库下面时 目录打印“真”,否则为“假”。

--is-inside-git-dir

当当前工作目录在工作树中时 存储库打印“真”,否则为“假”。

--is-inside-work-tree

当存储库为裸时打印“true”,否则打印“false”。

--is-bare-repository

当仓库是浅层时打印“true”,否则打印“false”。

--is-shallow-repository

当从子目录调用命令时,显示 顶级目录相对于当前的路径 目录(通常是“../”的序列,或空字符串)。

--show-cdup

当从子目录调用命令时,显示 当前目录相对于顶层的路径 目录。


警告:“--show-prefix”命令没有诊断出在 v2.31 时代引入的“rev-parse”选项缺少参数:这已在 Git 2.32(2021 年第二季度)中得到纠正).

参见commit 99fc555Wolfgang Müller (wylfen)(2021 年 5 月 17 日)。
(2021 年 5 月 22 日在 Junio C Hamano -- gitster --commit 99fe1c6 合并)

<块引用>

rev-parse:修复缺少 --path-format 参数的段错误

签字人:Wolfgang Müller

<块引用>

在没有参数的情况下调用“git rev-parse --path-format(man) 而不是给出错误消息。
提交 fac60b8(“--path-format:添加绝对或相对路径格式的选项”,2020 年 12 月 13 日,Git v2.31.0-rc0 -- merge 列在 batch #2 ) 添加了参数解析代码但忘记处理 rev-parse

在这里返回错误是有意义的,因为我们没有可以使用的默认值。
添加测试用例进行验证。

错误消息现在将准确地为:

NULL