43

git でバージョン管理されている多数のファイルに 1 つの簡単な変更を加えましたが、この大きなコミットに他の変更が含まれていないことを確認できるようにしたいと考えています。

変更はすべてフォームの

-                       "main()",
+                       OOMPH_CURRENT_FUNCTION,

ここで、「main()」は任意の関数の名前にすることができます。この形式ではないすべての変更の差分を生成したいと考えています。

git diff の -G オプションと -S オプションは、興味をそそられるほど近いものです。文字列または正規表現に一致する変更を検出します。

これを行う良い方法はありますか?

これまでの試み

別の質問では、正規表現を否定する方法について説明しています。このアプローチを使用すると、コマンドは

git diff -G '^((?!OOMPH_CURRENT_FUNCTION).)*$'

しかし、これはエラーメッセージを返すだけです

fatal: invalid log-grep regex: Invalid preceding regular expression

したがって、git はこの正規表現機能をサポートしていないと思います。

また、標準の unix diff には、「すべての行が RE に一致する変更を無視する」 -I オプションがあることにも気付きました。しかし、git 自身の diff を unix diff ツールに置き換える正しい方法が見つかりません。

4

4 に答える 4

24

次のことを試してください。

$ git diff > full_diff.txt
$ git diff -G "your pattern" > matching_diff.txt

次に、次のように 2 つを比較できます。

$ diff matching_diff.txt full_diff.txt

すべての変更がパターンに一致し、同一full_diff.txtmatching_diff.txtなり、最後のdiffコマンドが何も返さない場合。

パターンに一致しない変更がある場合、最後diffはそれらを強調表示します。


上記の手順をすべて組み合わせると、次のように 2 つの余分なファイルを作成する必要がなくなります。

diff <(git diff -G "your pattern") <(git diff)  # works with other diff tools too
于 2013-04-09T10:10:01.210 に答える
0

パイプと を使用した別の解決策があると思いますgrep@@とを含まない違いをチェックする必要がある2つのファイルがあったので、これを行いました(ここここここg:から借ります:

$ git diff -U0 --color-words --no-index file1.tex file2.tex | grep -v -e "@@" -e "g:"

そして、それはうまくいったようです。色はまだありました。

したがって、より単純なgit diffコマンド/出力を使用して同じことを実行できると思います。これについて私が気に入っているのは、新しいファイルの作成やリダイレクト (パイプ以外) を必要としないことです。

于 2019-06-29T02:46:11.953 に答える