2012-05-02 13 views
6

git repo(60個のファイルが変更され、1635個の挿入(+)、3個の削除( - ))にかなり大きなコミットをしました。コードの残りの部分はタブを使用します。スペースをコミット時に変更した行に変換する

私はスペースを使用するかもしれない他のコードを変更したくないので、そのコミットによって変更された行だけでタブのスペースを置きたいと思います。

どうすればいいですか?私は作業ディレクトリや元のコミットを変更するかどうかは気にしませんが、いずれも問題ありません。

+1

私が編集したディレクトリ内のすべてのファイルを修正して解決しましたが、今度は不要な変更を元に戻します。しかし、私はまだ良い解決策があるかどうかを知りたいです。 – svick

答えて

3

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

#!/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 
+0

ありがとう、完璧に働いた。 – svick

+1

4スペースのタブが必要な場合は、{1,7}と{8}を{1,3}と{4}に変更します。 [perl.foo = 0] –

+0

Perlは読み取り専用ですが、あなたはそれを変更することはできません:)しかし、それはそれを行うべきです – robinr

関連する問題