2

変更されたファイルがコミットされる前に、末尾の空白をすべて削除する必要があります。問題はそれを行う方法ですか?

4

3 に答える 3

1

コミット時に末尾の空白を自動的に削除する良い方法があるとは思いません (できればそれを行うのは良い考えではないと思います)。

以前にフックを使用して、末尾に空白を追加するコミットを拒否しましたが、これはうまく機能しました。以下を作成/追加して、.git/hooks/pre-commit実行可能にします。

# Work out what to diff against
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

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --
于 2012-10-25T13:16:24.983 に答える
0

デフォルトでは、Git は末尾の空白について警告し、空白エラーを追加するコミットを拒否するように構成できます。

空白の削除は、ファイルを変更してステージをやり直すことによってのみgit-add機能します。追加時にこれを自動的に実行することは可能ですが、ステージングされたものとは異なる作業ツリーが残るため、ファイルは引き続き "変更されましたが、更新されていません」というgit-status出力が表示されます。

末尾の空白を削除する最も簡単な方法は

sed -i -e 's/[:blank:]*$//' file.c ...
于 2012-10-25T08:43:05.047 に答える
0

結局、そのために gitadd コマンドを書くことにしました。

#!/bin/bash


# Number of arguments passed
argc=$#


if [ $argc -eq 0  ]; then
        argv=( $(git diff --name-only HEAD) )
else
        argv=( $@ )
fi

for file in "$argv"; do

        sed -i -e 's/^[[:blank:]]\+$//' $file

        git add $file # stage patched file

done
于 2012-10-26T06:56:19.723 に答える