1

の奇妙な動作に気付きましたgit diff:

いくつかの作業ファイルを HEAD と比較したい、たとえばdir/a.hand dir/a.cc.

使用するgit diff HEADとうまく機能しますが、変更したファイルはこれら 2 つ以上です。そこで、コマンドを に変更しましたgit diff HEAD -- * a.*。驚いたことに、HEAD でこれら 2 つのファイルを見つけることができず、それらを新しく追加されたものとして扱います。

$ git diff --stat HEAD
 dir/a.cc |   32 ++++++++++----------------
 dir/a.h  |   12 +++++-----
 2 files changed, 18 insertions(+), 26 deletions(-)

$ git diff --stat HEAD -- *a.*
 dir/a.cc |  208 +++++++++++++++++++++++++++
 dir/a.h  |  142 ++++++++++++++++++
 2 files changed, 350 insertions(+), 0 deletions(-)

================================================== =====================

更新: コード ベースに特別なことを避けるために、テスト用に新しいディレクトリと 2 つの新しいファイルを追加しました。

最初に dir2/bh と dir2/b.cc をコミットしました。どちらのファイルも 1 行の内容しかありません。次に、これらのファイルに小さな変更を加えて、git diff をテストしました。

これは正しい動作です:

$ git diff --stat HEAD 
 dir2/b.cc |    2 +-
 dir2/b.h  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

これも正しいです:

$ git diff --stat HEAD -- dir2/*b.*
 dir2/b.cc |    2 +-
 dir2/b.h  |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

しかし、これは奇妙です (両方のファイルを新規として扱います):

$ git diff --stat HEAD -- *b.*
 dir2/b.cc |    1 +
 dir2/b.h  |    1 +
 2 files changed, 2 insertions(+), 0 deletions(-)

@Chronial、私はレポのルートディレクトリにいます。@jszakmeister、これらの 2 つのファイルは新しいだけなので、名前の変更/移動とは関係ないようです...

「gitステータス」は正しいです:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   dir2/b.cc
#       modified:   dir2/b.h
#
no changes added to commit (use "git add" and/or "git commit -a")

bashの「*」マッチングに関する問題ではないかと思います。しかし、まだ行動が理解できません...

4

0 に答える 0