5

一連の入力ファイルに対してテストするツールを実行する小さなテストスイートを作成しています。入力ファイルごとに、対応する出力ファイルがツールによって作成されています(どちらもXML形式です)。入力ファイルと出力ファイルはGitリポジトリにチェックインされます。

出力ファイルにはツールがコンパイルされた時間が含まれているため、出力ファイルは、テスト対象のツールによって再作成された後、確実に変更されます。

出力が変更されたかどうかを簡単に確認するために(ツールのソースを変更したとき)、ノードのコンテンツが変更されたかどうかを確認したいと思いますOutputFingerprint(出力ファイルの関連部分のコンテンツの単純なハッシュ) 。

のマニュアルを読んで、私はオプションgit-diffがあることがわかりました:-G

-G<regex>
追加または削除された行が指定された<regex>と一致する相違点を探します。

残念ながら、-Gオプションの使用方法の例は提供されていません。

私の最初の考えは単に書くことでした

git diff -GOutputFingerprint

しかし、それは間違っています:

> git diff -GOutputFingerprint
error: invalid option: -GOutputFingerprint

次の考えは、正規表現をスラッシュで囲むことでしたが、これも成功していません。

> git diff -G/OutputFingerprint/
error: invalid option: -GC:/Program Files/Git/OutputFingerprint/

-Gまた、との間にスペースを入れるだけでOutputFingerprintは機能しません。

> git diff -G OutputFingerprint
fatal: ambiguous argument 'OutputFingerprint': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions

git diffパラメータを指定せずに呼び出すと、次のように変更されます。

-    <OutputFingerprint>e45807ca76fc5bb78e9e928c6fb7eed6</OutputFingerprint>
+    <OutputFingerprint>d0846851bc9d52b37f7919def78660a2</OutputFingerprint>

別の考えはを使用することgit diff -S".*OutputFingerprint.*" --pickaxe-regexでしたが、これも成功していません。

git --versiongit version 1.7.3.1.msysgit.0それが適切かどうかを教えてください。

私が尋ねるgit diff --helpと、提供されたマニュアルは私に-Gオプションを示しています。

git diff -Gそれで、誰かが私に正しく使用する方法の例を教えてもらえますか?

4

1 に答える 1

5
git diff -Garegex

msysgit 1.7.4で正常に動作しますが、bashセッションでのみ実行されます(DOSセッションでは何も返されません)

正規表現がステージングされたバージョンに追加または削除されdiffた行と一致するかどうかが表示されます。追加または削除変更されていません。 あなたの場合の意味、

動作しません

OP eckesは、それが機能することを報告し(msysgit1.7.4+のみ)、オプションのdiffマニュアルページには次のものが含まれていると付け加えています。-G

「追加または削除された行が指定された正規表現と一致する相違点を探します」。これは、変更された行が1つの追加行と1つの削除行として
出力されるdiff出力に関連しています。


例:新しい行「aaa」を追加します(なしgit add:単純な編集)

$ git diff -Gaaa

diff --git a/conf/fragments/xxx_repos.conf b/conf/fragments/xxx_repos.coindex 263fa85..3475f9b 100644
--- a/conf/fragments/xxx_repos.conf
+++ b/conf/fragments/xxx_repos.conf
@@ -10,3 +10,4 @@ repo xxx-sdsfwk
     RW+                                = vonc user1 user2
     RW                                 = @xxx_users
 xxx-sdsfwk "Owner" = "for..."
+aaa

Git 2.33(Q3 2021)では、--pickaxe-regex(通常はのために予約されている-S)を使用することはできません-G(とにかくすでに正規表現を使用しています)。

commit 5d93460、commit 22233d4commit f97fe35commit fa59e7bcommit 9e20442、commit a8d5eb6 commit 5b0672a commit 5d35a95commit 52e011ccommit 2e197a7commit 03c1f14 、commit d90d441 、commit 102fdd 7cd5d5bcommit 064952fcommit 69ae930commit c960939commit 6d0a401commit ecbff14(2021年4月12日)byÆvarArnfjörðBjarmason(avar( Junio C Hamano
によってマージされました---コミット4da281e 、20217月13日)gitster

pickaxe-G:と--pickaxe-regexが組み合わされたときに死ぬ

サインオフ:ÆvarArnfjörðBjarmason

-Gオプションと--pickaxe-regexオプションを組み合わせると、オプションは無視されます--pickaxe-regex。は常に正規表現である
ため、ドキュメントで提案されているように、代わりに死にましょう。-G

d01d8c6(「正規表現に一致するつるはしのサポート」、2006-03-29、Git v1.3.0-rc4 --merge --pickaxe-regexで追加されたとき、オプションのみが存在していました。 次に、 f506b8eで追加されたとき(「gitlog / diff:パッチテキストでグリップする-Gを追加」、2010-08-23、Git v1.7.4-rc0 --merge 、のドキュメントはそれに応じて更新されませんでした。このアサーションのようなものが追加されました。-S
-G--pickaxe-regex

5bc3f0b ( "diffcore-pickaxe doc:document -S and -G適切に"、2013-05-31、Git v1.8.4-rc0 --merge 以降、とのみ使用する必要があると主張しました、組み合わせることは黙って許容しています。それで、代わりに死にましょう。--pickaxe-regex-S-G

于 2011-02-23T12:49:40.237 に答える