7

私は git リポジトリにかなり大きなコミットをしました (60 個のファイルが変更され、1635 個の挿入 (+)、3 個の削除 (-)) があり、残りのコードではタブを使用しているのに対し、インデントにスペースを使用していることに気付きました。

したがって、タブのスペースを置き換えたいのですが、スペースを使用する可能性のある他のコードを変更したくないため、そのコミットによって変更された行でのみです。

どうやってやるの?作業ディレクトリまたは元のコミットを変更するかどうかは気にしません。どちらでも問題ありません。

4

1 に答える 1

3

私が書いた小さなスクリプト (washamend) を試すことができます。最初にコミットしてから、このスクリプトを実行してクリーンアップします。そのために amend を使用します。

#!/bin/bash -e
#
# Rewrite the last commit to remove any trailing whitespace
# in the new version of changed lines.
# Then replace space-based indentation with TAB based indentation
# based on TABS at every eight position
#
[[ -z $TRACE ]] || set -x
trap "rm -f $tmpf" 0
tmpf1=$TMP/$$.1.diff
tmpf2=$TMP/$$.2.diff
git show --binary >$tmpf1
perl -p -e 's/^(\+.*?)[ \t]+$/$1/; while(m/^(\+\t*)( {1,7}\t| {8})(.*)/) { $_=$1."\t".$3."\n"; }' <$tmpf1 >$tmpf2
if ! cmp -s $tmpf1 $tmpf2
then
    git apply --binary --index -R --whitespace=nowarn $tmpf1
    git apply --binary --index $tmpf2
    GIT_EDITOR=true git commit --amend
else
    echo "No changes"
fi
于 2012-05-02T13:14:16.153 に答える