>我的一个iOS应用程序中有一个脚本,应该获取git修订哈希并将其放入版本号中。在这个脚本中,我运行 git --git-dir="$PROJECT_DIR" 显示 -s --pretty=format:%h。但是,我收到消息说该目录不是 git 存储库。如果我回显PROJECT_DIR var 并转到终端,则以下工作:
cd projectDirPath
git show -s --pretty=format:%h
不起作用的是:
git --git-dir=projectDirPath show -s --pretty=format:%h
我错过了什么吗?文档指出,我可以使用 --git-dir 指定 git 存储库的路径,并且指定的路径显然是一个 git 存储库,因为如果我首先 cd 到该路径,所有 git 命令都可以正常工作。但是,如果我不在此路径中,则指定 --git-dir 不起作用。
使用 --git-dir
时,您需要指向存储库的.git
文件夹。 尝试:
git --git-dir=projectDirPath/.git show -s --pretty=format:%h
--git-dir
上的文档说:
--git-dir=
设置存储库的路径(".git"目录)。这也可以通过设置 GIT_DIR 环境变量来控制。它可以是当前工作目录的绝对路径或相对路径。
我曾经自己记得这个有问题。为了帮助我记住该做什么,我试着记住该选项正在询问它想要的东西:.git
目录(git-dir)的路径。
您正在寻找 git -C 命令行选项。
-C <path>
像启动 git 而不是当前一样运行 工作目录。当给出多个
-C
选项时,每个选项都 后续非绝对-C <path>
相对于 前面-C <path>
.如果<path>
存在但为空,例如-C ""
, 则当前工作目录保持不变。此选项会影响需要路径名的选项,例如
--git-dir
--work-tree
在于他们对路径名的解释 将相对于由-C
引起的工作目录 选择。例如,以下调用是等效的:git --git-dir=a.git --work-tree=b -C c status git --git-dir=c/a.git --work-tree=c/b status
> 除了--git-dir
,设置--work-tree
可能会有所帮助。对于脚本,最好使用相关环境(更容易),例如
#!/bin/bash -ex
export GIT_WORK_TREE=/path/to/repo
export GIT_DIR=/path/to/repo/.git
git show -s --pretty=format:%h