是否有相同的命令始终返回绝对路径?
git rev-parse --git-path hooks
当我在子模块中时,我得到一个绝对路径,但是当我在根存储库中时,我得到了
的.git /钩
答案 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 fac60b8,commit 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 99fc555的Wolfgang 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