0

我需要查看包含不同版本的软件源代码的两个目录之间发生了什么变化。虽然我找到了一种获取唯一 .diff 文件的方法,但如何为两个目录中的每个更改的文件获取不同的文件?我需要这个,因为“主要”大约是 6 MB,并且想要一些更方便的东西。

4

3 回答 3

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
于 2013-06-20T17:23:49.827 回答
0

if you want to compare source code it is better to commit it to a source vesioning program as "svn".

after you have done so. do a diff of your uploaded code and pipe it to file.diff

  svn diff --old svn:url1 --new svn:url2 > file.diff
于 2013-03-07T10:02:15.920 回答
0

bash for 循环将为您工作。下面将使用 C 源代码对两个目录进行比较,并为每个文件生成一个单独的差异。

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

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

于 2015-02-26T23:49:30.550 回答