33

我的一个 iOS 应用程序中有一个脚本,它应该获取 git 修订哈希并将其放入版本号。在这个脚本中,我为此运行 git --git-dir="$PROJECT_DIR" show -s --pretty=format:%h 。但是,我收到该目录不是 git 存储库的消息。如果我回显 PROJECT_DIR 变量并转到终端,则以下工作:

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 不起作用。

4

3 回答 3

45

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

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

上的文档--git-dir说:

--git目录=

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

我曾经有一个问题自己记住这一点。为了帮助我记住要做什么,我试着记住该选项正在询问它想要的内容:.git目录的路径(git-dir)。

于 2012-10-14T10:40:03.457 回答
3

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

-C <path>

就像启动 git 而不是当前工作目录一样运行。当给出多个-C选项时,每个后续的 non-absolute-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
于 2020-02-05T20:36:24.473 回答
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
于 2017-05-18T19:45:08.180 回答