1

以下の手順に従って、まばらなチェックアウトを行いました

git clone http://location/repo.git
# create .git/info/sparse-checkout file
git config --bool core.sparsecheckout true
git read-tree -mu HEAD

残念ながら、最後のステップはエラーメッセージで失敗します

Entry 'path/to/file' not update. Cannot update sparse checkout

path/to/file(1)存在する(2)スパースチェックアウトプロセスが別のマシンgitバージョン1.7.1(Centos 6)で成功したため、これは奇妙です。現在のマシンは、git バージョン 1.8.3.1 がインストールされた Centos 7 ボックスです。の出力はgit config --list両方のマシンで同じです。

4

3 に答える 3

0

ie_match_stat関数が統計情報と一致しない場合、(作業ツリーにあるファイルに対して) エラーが発生します。この特定の呼び出しは、通常はキャッシュ エントリ フラグに従うか、「ワーク ツリーのコピーは最新でなくても最新です」と言ってie_match_stat渡します。スパース チェックアウト コードは、skip-worktree フラグ ( ) を使用して、チェックアウトしてはならないファイルをマークします。これにより、Git の残りの部分がファイルが見つからないというエラーを出さなくなります。CE_MATCH_IGNORE_VALID|CE_MATCH_IGNORE_SKIP_WORKTREEie_match_statCE_VALIDCE_SKIP_WORKTREECE_SKIP_WORKTREE

したがって、ここでの奇妙な点は次のとおりです。

  • スキップ ワークツリー ビットは、ワーク ツリーにあるファイルに設定されます。なんで?
  • このファイルのインデックス エントリのキャッシュデータが、このファイルの結果statと一致しません。lstatなんで?

最初の質問に対する答えは次のようになります:ユーザーが( を使用してgit update-index) 設定したためです。2 番目の答えは次のようになります。ユーザーがファイルを変更したためです。したがって、それらは特に奇妙ではなく、ファイルが最初のチェックアウトまたはgit read-tree操作によって作成されたものと一致しないことを意味するだけです。ファイルの内容を失うことを気にしない場合は、自由に削除してください。内容が気になる場合は、skip-worktree ビット ( git update-index --no-skip-worktree) をクリアしてgit diffください。その後、何が違うのかが表示されます。

この領域には、特に古いバージョンの Git (Git 1.8.x - 現在の Git は 2.22) にいくつかのバグがある可能性があります。

于 2019-07-10T20:25:28.450 に答える