2013-05-06 61 views

回答

1

我在SVN寫了一個函數前一陣子把分差對庫 - 基本目標是「寫回購版本的文件,然後打開vim的差異,然後再刪除文件」

function diff(){ 
    file=${!#} 
    tmpfile=/tmp/repo/${!#} 
    mkdir -p `dirname $tmpfile` 
    svn cat [email protected] > $tmpfile 
    vimdiff $file $tmpfile 
    rm -rf /tmp/repo/ 
} 

我「M不習慣的Git,但這裏有一個想法:

function multiDiff(){ 
    fname=$1 
    shift 
    files="" 
    while (("$#")) 
    do 
     tmpfile="/tmp/repo/$1/$fname" 
     mkdir -p `dirname $tmpfile` 
     git show HEAD~$1:$fname > $tmpfile 
     files="$files $tmpfile" 
     shift 
    done 
    vimdiff $files 
    rm -rf /tmp/repo 
} 

的函數保存一個版本的每個文件到臨時目錄中,然後DIFFS所有文件。它會被調用multidiff index.html 2 3 4你甚至可以編寫一個方便的功能做序列:

function multiDiffSeq(){ 
    multiDiff $1 `seq $2 $3` 
} 

這將轉化multiDiffSeq index.html 2 4multiDiff index.html 2 3 4

這種配置的這最大的好處是,文件的擴展名被保留,這意味着你的語法高亮將被保留。

如果是在GIT處理一些錯誤,對不起 - 我現在還沒有一個git回購練對抗。希望那些幫助。

2

您可以使用${array_variable[index]}訪問bash數組元素。在bash數組索引從0開始。

所以

revs=(2 3); f=index.html; vimdiff <(git show HEAD~${revs[0]}:"$f") <(git show HEAD~${revs[1]}:"$f")