0

異なるバージョンのソフトウェア ソースコードを含む 2 つのディレクトリ間で何が変更されたかを確認する必要があります。一意の .diff ファイルを取得する方法を見つけましたが、2 つのディレクトリで変更されたファイルごとに異なるファイルを取得するにはどうすればよいですか? 「メイン」は約6 MBで、もっと便利なものが欲しかったので、これが必要です。

4

3 に答える 3

1

私もこの問題を回避したので、シェルスクリプトのいくつかの行になりました。3 つの引数を取ります。ソースと宛先のディレクトリ (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
于 2013-06-20T17:23:49.827 に答える
0

ループ用のbashが機能します。以下は、C ソース コードを含む 2 つのディレクトリを比較し、ファイルごとに個別の 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

+++ で始まる行に正しいパッチ レベルを使用します。

于 2015-02-26T23:49:30.550 に答える
0

ソース コードを比較したい場合は、「svn」としてソース vesioning プログラムにコミットすることをお勧めします。

あなたがそうした後。アップロードしたコードの diff を実行し、それを file.diff にパイプします

  svn diff --old svn:url1 --new svn:url2 > file.diff
于 2013-03-07T10:02:15.920 に答える