私は、テキストエディタでファイル保存時に自動的に末尾の空白を切り詰めるようにしていますが、末尾の空白に深刻な問題があるオープンソースプロジェクトに貢献しているんです。
パッチを提出しようとすると、まず空白だけの変更をすべて手作業で無視し、関連する情報のみを選択しなければなりません。それだけでなく、git rebase
を実行すると、大抵はそれらのためにいくつかの問題に遭遇します。
そのため、git add -p
と同様の方法で、すべての変更を自分で選択することなく、非ホワイトスペースの変更のみをインデックスに追加できるようにしたいと思っています。
どなたか方法をご存じないでしょうか?
EDIT: 私はプロジェクトのやり方を変えることは**できないし、メーリングリストでの議論の後、彼らはこれを無視することを決定しました。
これは私にとって有効な手段です。
隠し持つなら、これが効果的
git stash && git stash apply && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch
私はstashは好きではありませんが、git + cygwinで変更を失うバグに*遭遇したことがあるので、少なくともそのものがreflogに行ったことを確認するために、私は次のように設定しました。
git add . && git commit -am 'tmp' && git reset HEAD^ && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch
基本的には、スペースの変更を含まない diff を作成し、すべての変更を元に戻してから、その diff を適用しています。
まず、末尾の空白が意図的なものであるかどうかを考える必要があります。Linuxカーネル、Mozilla、Drupal、Kerberos(Wikipediaのスタイルに関するページより)など、多くのプロジェクトが末尾の空白を禁止しています。 Linuxカーネルのドキュメントから。
まともなエディタを使いましょう。 行末に空白がある。
あなたの場合、問題はその逆で、以前のコミット(そしておそらく現在のコミット)がこのガイドラインに従っていなかったということです。
末尾の空白は誰も望んでいないでしょうから、この問題の解決は歓迎すべきことかもしれません。 また、他のユーザーもあなたと同じ問題を経験しているかもしれません。 また、末尾の空白を追加している投稿者は、そのことに気づいていない可能性があります。
この問題を無視するようにgitを再設定したり、エディタの望ましい機能を無効にしたりするよりも、私ならまずプロジェクトのメーリングリストに問題を説明する投稿をします。 多くのエディタ(そしてgit自体)は、末尾の空白を処理するように設定することができます。
git の 末尾の空白を削除する pre-commit フック を見つけました。しかし、もしあなたが他の人にこれを使わせることができないのであれば、それは有効な解決策ではないかもしれません。
#!/bin/sh
if git-rev-parse --verify HEAD >/dev/null 2>&1 ; then
against=HEAD
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# Find files with trailing whitespace
for FILE in `exec git diff-index --check --cached $against -- | sed '/^[+-]/d' | sed -r 's/:[0-9]+:.*//' | uniq` ; do
# Fix them!
sed -i 's/[[:space:]]*$//' "$FILE"
done
exit