空白以外の変更のみ追加する 質問する

空白以外の変更のみ追加する 質問する

私のテキスト エディターでは、ファイルを保存するときに末尾の空白を自動的にトリミングしますが、末尾の空白に深刻な問題があるオープン ソース プロジェクトに貢献しています。

パッチを送信しようとするたびに、最初に空白のみの変更をすべて手動で無視して、関連する情報のみを選択する必要があります。それだけでなく、実行すると、git rebaseそれらの変更が原因でいくつかの問題に遭遇することがよくあります。

git add -pそのため、私は、すべての変更を自分で選択する必要なく、同様の方法で、空白以外の変更のみをインデックスに追加できるようにしたいと考えています。

誰かこれをどうやってやるのか知っていますか?

編集:プロジェクトの仕組みを変えることはできません。メーリング リストで議論した後、これを無視することに決定しました。

ベストアンサー1

@Frew の解決策は私が必要としていたものとは少し違っていたので、まったく同じ問題に対して私が作成したエイリアスは次のとおりです。

alias.addnw=!sh -c 'git diff -U0 -w --no-color --src-prefix=a/ --dst-prefix=b/ "$@" | git apply --cached --ignore-whitespace --unidiff-zero -'

または、単に次のコマンドを実行することもできます:

git diff -U0 -w --no-color --src-prefix=a/ --dst-prefix=b/ | git apply --cached --ignore-whitespace --unidiff-zero -

アップデート

コンテキストマッチングの問題を回避するために、それぞれオプション-U0、およびを追加しました。--unidiff-zeroこのコメント

基本的に、空白の変更なしで適用されるパッチを適用しますadd。 後に、ステージングされていない変更がまだ残っていることに気付くでしょうgit addnw your/file。それは空白が残っているからです。

--no-color は必須ではありませんが、colors を always に設定しているので、これを使用する必要があります。とにかく、安全を第一に考えましょう。

警告

このトリックはそのままでも機能しますが、これを使用して空白行の変更を削除しようとすると、--ignore-blank-lines状況が複雑になります。このオプションを使用すると、git diff一部のチャンクが削除されるだけなので、宛先ファイルの行番号がずれるため、結果のパッチは不正になります。

おすすめ記事