Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Diff 比较每个文件具有单独差异输出的两个目录_Diff - Fatal编程技术网

Diff 比较每个文件具有单独差异输出的两个目录

Diff 比较每个文件具有单独差异输出的两个目录,diff,Diff,我需要查看包含不同版本软件源代码的两个目录之间发生了什么变化。虽然我已经找到了一种获取唯一.diff文件的方法,但如何为两个目录中的每个更改的文件获取不同的文件?我需要这个,因为“main”大约是6MB,需要一些更方便的东西。如果您想比较源代码,最好将其提交给一个源代码Vesing程序作为“svn” 在你这样做之后。对上传的代码进行区分,并将其导入file.diff svn diff --old svn:url1 --new svn:url2 > file.diff 我也遇到了这个问

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

如果您想比较源代码,最好将其提交给一个源代码Vesing程序作为“svn”

在你这样做之后。对上传的代码进行区分,并将其导入file.diff

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

我也遇到了这个问题,所以我最终得到了一些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

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
用于$(find-name'*.[ch]'中的文件);do DIFF=/$(echo$文件| grep-o'[-_a-zA-Z0-9.]*$).DIFF;diff-u$FILE/$FILE>$diff;完成

对以+++

开头的行使用正确的补丁级别,因为我没有安装SVN,所以使用git。问题是,我想为每个不同的文件获得一个.diff,而不是一个全局.diff。无论如何,我会处理整个文件,因为显然没有解决方案。