git 与 --git-dir= 会导致“不是 git 存储库”

问题描述 投票:0回答:3

我的一个 iOS 应用程序中有一个脚本,它应该获取 git 修订哈希并将其放入版本号中。在此脚本中,我运行 git --git-dir="$PROJECT_DIR" show -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 bash terminal sh
3个回答
49
投票

使用

--git-dir
时,您需要指向存储库的
.git
文件夹。尝试:

git --git-dir=projectDirPath/.git show -s --pretty=format:%h

--git-dir
上的医生说:

--git-dir=

设置存储库的路径(“.git”目录)。这也可以通过设置 GIT_DIR 环境变量来控制。它可以是当前工作目录的绝对路径或相对路径。

我自己过去常常记不住这一点。为了帮助我记住要做什么,我尝试记住该选项正在询问它想要的内容:

.git
目录(git-dir)的路径。


4
投票

您正在寻找 git -C 命令行选项

-C <path>

就像 git 是在

<path>
中启动而不是当前启动一样运行 工作目录。当给出多个
-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

2
投票

除了

--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
© www.soinside.com 2019 - 2024. All rights reserved.