2013-02-24 109 views
0

我需要看看兩個目錄中包含不同版本的軟件源代碼之間發生了什麼變化。雖然我找到了獲取唯一.diff文件的方法,但是如何爲兩個目錄中的每個更改文件獲取不同的文件?我需要這個,因爲「主」大約是6MB,並且想要一些更方便的東西。比較兩個目錄與​​每個文件單獨的差異輸出

回答

0

如果你想比較源代碼,最好把它提交給源代碼程序作爲「svn」。

完成之後。做您上傳的代碼和管道DIFF它file.diff

svn diff --old svn:url1 --new svn:url2 > file.diff 
+0

我使用Git這樣做是因爲我沒有SVN安裝。問題是我想要一種方法來爲每個不同的文件獲取一個.diff,而不是全局的.diff。無論如何,我會處理整個文件,因爲顯然沒有解決方案。 – LeoTh3o 2013-03-07 18:37:33

1

我來解決這個問題了,所以我結束了一個shell腳本的一些線路。它有三個參數:輸出的源和目標目錄(用於diff)和目標文件夾(應該存在)。

這有點不好意思,但也許對某人有用。所以請小心使用,特別是如果您的路徑有特殊字符。

#!/bin/sh 

DIFFARGS="-wb" 

LANG=C 
TARGET=$3 
SRC=`echo $1 | sed -e 's/\//\\\\\\//g'` 
DST=`echo $2 | sed -e 's/\//\\\\\\//g'` 

if [ ! -d "$TARGET" ]; then 
    echo "'$TARGET' is not a directory." >&2 
    exit 1 
fi 

diff -rqN $DIFFARGS "$1" "$2" | sed "s/Files $SRC\/\(.*\?\) and $DST\/\(.*\?\) differ/\1/" | \ 
while read file 
do 
    if [ ! -d "$TARGET/`dirname \"$file\"`" ]; then 
    mkdir -p "$TARGET/`dirname \"$file\"`" 
    fi 
    diff $DIFFARGS -N "$1/$file" "$2/$file" > "$TARGET"/"$file.diff" 
done 
0

bash for循環將適用於您。以下將使用C源代碼來區分兩個目錄,併爲每個文件生成一個單獨的diff。

for FILE in $(find <FIRST_DIR> -name '*.[ch]'); do DIFF=<DIFF_DIR>/$(echo $FILE | grep -o '[-_a-zA-Z0-9.]*$').diff; diff -u $FILE <SECOND_DIR>/$FILE > $DIFF; done 

使用正確的補丁級別爲開頭的行+++

相關問題