5

現在、bash 用の git-prompt のプロジェクトを維持しており ( https://github.com/magicmonty/bash-git-prompt )、バグ レポートを入手しました ( https://github.com/magicmonty/bash-git -prompt/issues/97.git ) Docker を使用している誰かから、プロンプトを使用するたびに、ディレクトリが常にアクセスされるため、キャッシュが無効になると教えてくれました。

これを調べたところ、ディレクトリgit statusに触れるのは command であることがわかりました。.gitディレクトリエントリ自体だけで、内容には触れていないようです。なぜこれが必要なのか、それとも Git のバグなのか、誰でも説明できますか。

.git ディレクトリに触れずに、すべてのステータス情報を表示する方法はありますか?

助けてくれてありがとう

アップデート:

コマンドを使用する全体的な理由git statusは、追跡されていないファイルの数を判断することだったgit ls-files --others --exclude-standard | wc -lので、ロックを必要としない に置き換えました。

4

1 に答える 1

7

strace git statusは、このアクションがロック ファイルを使用していることを示しています.git/index.lock。そのため、.gitの mtime が更新されます。

gitかっこいいので、環境変数を使用して、使用するGIT_INDEX_FILEロックファイルを決定します。設定されていない場合git .git/index(これがデフォルト) を使用しますが、設定されている場合gitはその値を使用します。からman git:

GIT_INDEX_FILE

この環境では、代替索引ファイルを指定できます。指定しない場合、デフォルトの$GIT_DIR/indexが使用されます。

そう:

GIT_INDEX_FILE=banana git status

.gitの mtimeを更新しません。

そのため、この道を進むかどうかを決定する必要があります (これには確かに多くの注意事項があります)。

幸運を!

于 2014-11-14T20:27:44.277 に答える