2012-05-02 11 views
6

Bir git repo için büyük bir taahhütte bulundum (60 dosya değişti, 1635 ekleme (+), 3 silme (-)) ve şimdi farkettim ki; Girinti, kodun geri kalanında sekmeler kullanır.Satırları satırlardaki sekmelere dönüştürüyorum Bir taahhütte değişiklik yaptım

Bu nedenle, sekmeler için boşlukları değiştirmek istiyorum, ancak yalnızca bu işlem tarafından değiştirilen satırlarda boşluk kullanabilecek başka bir kod değiştirmek istemiyorum.

Bunu nasıl yapabilirim? Çalışma dizinini mi yoksa asıl işi mi değiştireceğini umurumda değil.

+1

Tamam, düzenlediğim dizindeki tüm dosyaları değiştirerek çözdüm ve şimdi istenmeyen değişiklikleri geri alacağım. Ama yine de daha iyi bir çözüm olup olmadığını bilmek isterim. – svick

cevap

3

Yazdığım küçük bir senaryoyu deneyebilirsiniz (washamend). İlk önce, sonra bu betiği temizlemek için çalıştırın. Bunu yapmak için 'u kullanır.

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

Teşekkürler, mükemmel çalıştı. – svick

+1

Biri 4 boşluk sekmesi gerekiyorsa, {{7}} ve {8} 'ile {1,3}' ve '{4}' arasında bir değişiklik olduğunu varsayarım. [perl.foo = 0] –

+0

Perl salt okunur, bunu değiştiremezsin :) ama bunu yapmalısın – robinr