我需要查看包含不同版本软件源代码的两个目录之间的更改。虽然我找到了获取唯一.diff文件的方法,但如何为两个目录中的每个更改文件获取不同的文件?我需要这个,因为“主要”大约是6 MB,并且想要一些更方便的东西。
答案 0 :(得分:1)
我也解决了这个问题,所以我最终得到了一些shell脚本。它需要三个参数:源和目标目录(用于diff)和输出的目标文件夹(应该存在)。
有点hacky,但也许对某人有用。因此请小心使用,特别是如果您的路径有特殊字符。
#!/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
答案 1 :(得分:0)
如果你想比较源代码,最好将它作为“svn”提交给源代码程序。
你这样做之后。对上传的代码进行差异处理并将其传递给file.diff
svn diff --old svn:url1 --new svn:url2 > file.diff
答案 2 :(得分: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
对以+++
开头的行使用正确的补丁级别