-1

在 Docker 容器内的 Git 工作树目录中,error: unknown option `cached'运行git diff --cached.

Git 的版本是 2.32.0,它明确指出它应该存在。

当切换回主存储库并将其挂载到容器中时,该命令可以正常工作。

这里发生了什么?

4

1 回答 1

0

所以问题是两方面的。

git diff与大多数其他 Git 命令不同,它甚至可以在 Git 存储库树之外工作。它通过根据是否检测到 Git 存储库更改 CLI 界面来实现此目的。

这种更改 CLI 接口逻辑似乎是“如果当前存储库无效,则使用非 Git CLI 选项”。

在我们的例子中,我们将当前目录绑定挂载到 Docker 容器中。如果当前目录是一个 Git 工作树,那么该.git节点就是一个常规文件,其中包含指向主存储库的路径。但是,容器中不存在该存储库的路径,因此 Git 确定当前目录不是git diff“有效存储库”,因此从我们脚下切换了选项。

此外,Git 的检测似乎不想在“找到.git但它无效”上出错,并且默默地忽略这种情况,并且根据 IRC 频道中的用户,没有办法强制git diff期望当前目录是 Git存储库和错误,如果它是无效的。

有一些解决方法,但大多数都是 hack - 我将把它作为练习留给读者。


tl;dr如果.git是一个文件(因为它在工作树中)并且该文件指向的目录不存在,则git默认将当前目录视为非存储库,这会更改 CLI 选项,git diff因为它是被设计的支持非存储库(与大多数其他git命令不同)。

于 2021-10-06T17:14:57.247 回答