在 Docker 容器内的 Git 工作树目录中,error: unknown option `cached'
运行git diff --cached
.
Git 的版本是 2.32.0,它明确指出它应该存在。
当切换回主存储库并将其挂载到容器中时,该命令可以正常工作。
这里发生了什么?
在 Docker 容器内的 Git 工作树目录中,error: unknown option `cached'
运行git diff --cached
.
Git 的版本是 2.32.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
命令不同)。