git diff --cached:未知选项“缓存”
git diff --cached: unknown option `cached'
在 Docker 容器内的 Git 工作树目录中,当 运行 git diff --cached
.[=13= 时出现错误 error: unknown option `cached'
]
Git 在版本 2.32.0 上,明确说明它应该存在。
当切换回主存储库并将其安装到容器中时,该命令可以正常工作。
这是怎么回事?
所以问题是两方面的。
git diff
旨在甚至在 Git 存储库树之外工作,这与大多数其他 Git 命令不同。它通过根据是否检测到 Git 存储库更改 CLI 界面来实现此目的。
此更改 CLI 界面逻辑似乎是“如果当前存储库无效,则使用非 Git CLI 选项”。
在我们的例子中,我们将当前目录绑定安装到 Docker 容器中。如果当前目录是 Git 工作树,那么 .git
节点是一个常规文件,其中包含主存储库的路径。但是,那个存储库的路径在容器中不存在,因此Git确定当前目录不是“有效存储库”从而关闭了我们脚下的 git diff
选项。
此外,Git 的检测似乎不想在“找到 .git
但它无效”时出错,并默默地忽略这种情况,根据 IRC 中的一位用户的说法channel 无法强制 git diff
期望当前目录是 Git 存储库,如果无效则出错。
有一些解决方法,但大多数都是 hack - 我将把它作为练习留给 reader。
tl;dr 如果 .git
是一个文件(因为它在工作树中)并且该文件指向的目录不存在,git
默默地将当前目录视为非存储库,这会更改 git diff
的 CLI 选项,因为它被设计为支持非存储库(与大多数其他 git
命令不同)。
在 Docker 容器内的 Git 工作树目录中,当 运行 git diff --cached
.[=13= 时出现错误 error: unknown option `cached'
]
Git 在版本 2.32.0 上,明确说明它应该存在。
当切换回主存储库并将其安装到容器中时,该命令可以正常工作。
这是怎么回事?
所以问题是两方面的。
git diff
旨在甚至在 Git 存储库树之外工作,这与大多数其他 Git 命令不同。它通过根据是否检测到 Git 存储库更改 CLI 界面来实现此目的。
此更改 CLI 界面逻辑似乎是“如果当前存储库无效,则使用非 Git CLI 选项”。
在我们的例子中,我们将当前目录绑定安装到 Docker 容器中。如果当前目录是 Git 工作树,那么 .git
节点是一个常规文件,其中包含主存储库的路径。但是,那个存储库的路径在容器中不存在,因此Git确定当前目录不是“有效存储库”从而关闭了我们脚下的 git diff
选项。
此外,Git 的检测似乎不想在“找到 .git
但它无效”时出错,并默默地忽略这种情况,根据 IRC 中的一位用户的说法channel 无法强制 git diff
期望当前目录是 Git 存储库,如果无效则出错。
有一些解决方法,但大多数都是 hack - 我将把它作为练习留给 reader。
tl;dr 如果 .git
是一个文件(因为它在工作树中)并且该文件指向的目录不存在,git
默默地将当前目录视为非存储库,这会更改 git diff
的 CLI 选项,因为它被设计为支持非存储库(与大多数其他 git
命令不同)。