-1

Docker コンテナー内の Git ワークツリー ディレクトリ内で、error: unknown option `cached'実行時にエラーが発生しますgit diff --cached

Git はバージョン 2.32.0 にあり、存在する必要があることを明確に示しています。

メインリポジトリに戻ってコンテナにマウントすると、コマンドは正常に機能します。

何が起きてる?

4

1 に答える 1

0

したがって、問題は 2 つの側面に分かれていました。

git diff他のほとんどの Git コマンドとは異なり、Git リポジトリ ツリーの外でも動作するように設計されています。これは、Git リポジトリが検出されたかどうかに応じて CLI インターフェイスを変更することで実現されます。

この変更 CLI インターフェイス ロジックは、「現在のリポジトリが有効でない場合は、非 Git CLI オプションを使用する」ようです。

この例では、現在のディレクトリを Docker コンテナーにバインド マウントしていました。現在のディレクトリが Git ワークツリーの場合、.gitノードはメイン リポジトリへのパスを含む通常のファイルでした。ただし、そのリポジトリのパスはコンテナ内に存在しなかったため、Git は現在のディレクトリが「有効なリポジトリ」ではないgit diffと判断し、オプションを足元から切り替えました。

.gitさらに、Git の検出は「見つかりましたが有効ではありません」というエラーを発生させたくないようで、そのような場合は黙って無視します。IRC チャネルのユーザーによるとgit diff、現在のディレクトリが Git であることを強制的に期待する方法はありません。無効な場合はエラー。

いくつかの回避策がありますが、ほとんどは裏技です。それは演習として読者に任せます。


tl;drがファイル.git(ワークツリー内にある) であり、そのファイルが指すディレクトリが存在しない場合、git現在のディレクトリを非リポジトリとしてサイレントに処理し、git diff設計されているためにCLI オプションを変更します。非リポジトリをサポートします (他のほとんどのgitコマンドとは異なります)。

于 2021-10-06T17:14:57.247 に答える