2013-02-24 110 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 

使用正确的补丁级别为开头的行+++

相关问题