将空格转换为我在提交中更改的行中的选项卡

时间:2012-05-02 12:37:41

标签: git indentation

我已经对git repo做了很大的提交(60个文件已更改,1635个插入(+),3个删除( - )),现在我意识到我使用空格进行缩进,而其余代码使用了制表符。

所以,我想替换选项卡的空格,但仅限于该提交更改的行,因为我不想修改可能使用空格的其他代码。

我该怎么做?我不在乎它是否会修改工作目录或原始提交,也没关系。

1 个答案:

答案 0 :(得分: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