でgit diff
始まる変更をどのように無視できますか#
?一般的なdiff
コマンドでは、次のようなものを使用します。
diff <(grep -v '^#' file1) <(grep -v '^#' file2)
しかし、以下の提案された解決策のどれも機能しません!
git diff
コメントを省略すると本当に読むことができないのでしょうか?
修正する:
私の中に.gitconfig
:
[pager]
cdiff = diff-highlight
[alias]
cdiff = "diff -w --ignore-blank-lines -I'^#'"
これを行うと、git cdiff
次のエラーが発生します。
error: invalid option: -I^#
アップデート2:
本当に残念です。この構文はgit diff -G'^[^#]'
安定して動作しません。例:
$ cat 1.txt
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
新しいGitリポジトリを初期化します。
$ git init && git add . && git commit -m "initial commit" -a
ファイルの上部に説明を追加するだけです。
$ cat 1.txt
# comment
aaa
bbb
ccc
ddd
eee
fff
ggg
hhh
iii
jjj
これまでは期待通りに動作します。git diff -G'^[^#]'
コメントを変更としてマークしないでください。ただし、最後の行に実際の変更を追加して再度git diff -G'^[^#]'
実行すると、追加された最後の行が表示されますが(必要に応じて)、以前に表示されなかった最初のコメント行も表示されます。
したがって、デフォルトではコメント以外の変更を追加するたびに、gitはコメントまですべてを表示します。
ベストアンサー1
これは、ingの前にすべてのファイルをフィルタリングすることによってdiff
達成できます。
まず、小さなヘルパーを作成して呼び出しますstripcomments
(実行ファイル、どこかにありますPATH
)。
#!/bin/sh -
exec grep -ve '^#' -- "$@"
git diff
次に、このヘルパーを使用してモードを設定します。
git config diff.nocomments.textconv stripcomments
(現在のリポジトリが構成されています)。
最後に、すべてのファイルでこのヘルパーを使用するようにgit属性を設定します。
echo '* diff=nocomments' >> .gitattributes
(ストレージの最上位ディレクトリにあります)
git diff
これで始まるすべての行は無視されます#
。これは行番号付けに影響します。
すべての目的をオーバーライドするのではなく、それをエイリアスとして使用するには、上記のコマンドをgit diff
スキップしてgit config
次のようにエイリアスを作成します。
git config alias.cdiff '-c diff.nocomments.textconv=stripcomments diff'
これでコメントが削除された状態で実行されますgit cdiff
。git diff
#
git config --global
リポジトリごとに()にプロパティを使用して保存することで、これらすべてのエントリをグローバルに設定できます。$XDG_CONFIG_HOME/git/attributes
~/.config/git/attributes
.gitattributes
バラよりman gitattributes
そしてman git-config
もっと学ぶ。