4

コードレビューの目的で、既存のソースファイルが変更された後、それらのソースファイルで変更されたコード行のみをレビューします。
リポジトリ内のソースファイルに変更を加えた後、ピアコードレビューを行う前に、ソースファイル内で変更されたコード行を伝達する必要があります。

WinMergeを使用して視覚的な差分を確認でき、それが私にとって何をするかについては満足していますが、同僚の唯一の要件は、確認する必要のあるファイル名と行番号を知っていることです。

変更されたファイルの行番号のみを取得する方法はありますか?ファイルの種類は、Javascript、Java、XML、XSLなどのテキストソースファイルになります。

サンプルファイル-

foo(新しいバージョン):

a
b
c
d
e
f
g
h
i
j
k

foo(旧バージョン):

a
b
C
d
h
i
k

私が探している出力:

foo: 3, 5-7, 10-11

また

foo:
3
5-7
10-11

いくつかのプログラムがこれを可能にすると確信しています。見つかりません。助言がありますか?現在WinMergeを使用していますが、Windowsで実行されるプログラムであれば問題ありません。ソフトウェアがオープンソースまたはフリーウェアであることが望ましいでしょう。

編集:GNU DiffUtilsは私が望むものに近いですが、私のニーズに正確には適合していません。コマンドラインオプションを見ると、「-q」(または「--brief」)が簡略化された差分として表示されますが、単純すぎます。出力:

C:\Program Files\GnuWin32\bin>diff.exe -q foo1.txt foo2.txt
Files foo1.txt and foo2.txt differ

通常の差分出力:

C:\Program Files\GnuWin32\bin>diff.exe foo1.txt foo2.txt
3c3
<     c
---
>     C
5,7d4
<     e
<     f
<     g
10,11c7
<     j
<     k
---
>     k
\ No newline at end of file

diff -u出力:

C:\Program Files\GnuWin32\bin>diff.exe -u foo1.txt foo2.txt
--- foo1.txt    2010-11-09 15:47:12.447916000 -0600
+++ foo2.txt    2010-11-09 15:47:36.129954700 -0600
@@ -1,11 +1,7 @@
     a
     b
-    c
+    C
     d
-    e
-    f
-    g
     h
     i
-    j
-    k
+    k
\ No newline at end of file

私はdiff-qよりも有益なものを探していますが、diff-uやdiffよりも有益ではありません。これを可能にするさまざまなオプションを知っているdiff忍者はいますか?

私は常に、最近変更された新しいファイルを古いファイルと比較します。新しいファイルを確認する必要があるものだけが必要です。

4

4 に答える 4

3

GNU DiffUtilsはオープンソースで無料であり、Windowsポートを備えています。

于 2010-11-10T03:28:16.303 に答える
2

最初のファイルをx.txtとして保存し、2番目のファイルをy.txtとして保存します

次に、以下を実行します。

diff -i --unchanged-line-format="¥"--new-line-format= ":%dn:%L" y.txt x.txt | perl-pe's/¥/\n / g'| perl -pe'$ count ++; if($ _!〜/ ^ \ n $ /){print "$ count \ t";} '

于 2014-01-22T19:23:30.963 に答える
1

Windowsネイティブの方法を認識していませんが、これにはTextpadの「ファイルの比較」機能を使用しています。これはかなり良い方法です。

于 2010-11-09T21:59:53.137 に答える
1

Windowsネイティブ。SD Smart Differencerは、行ではなくプログラム構造にデルタを生成し、行/列-行/列および編集されたプログラムエンティティのタイプに関して正確です。ソーステキストを解析し、コード構造を使用して比較を実行することで比較します。デルタは、プログラマーが関心を持つアクション(挿入、置換、削除、置換)の観点から説明されています。

次に例を示します。

Java~Java1_5 SmartDifferencer Version 1.1.1
Copyright (C) 2009 Semantic Designs, Inc; All Rights Reserved; SD Confidential
Powered by DMS (R) Software Reengineering Toolkit
*** Parsing file C:/DMS/Domains/Java/Java1_5/Analyzers/SmartDifferencer/Tests/diff1_before.java ...
*** Parsing file C:/DMS/Domains/Java/Java1_5/Analyzers/SmartDifferencer/Tests/diff1_after.java ...
*** Creating suffix tree ...
*** Determining maximal pairs ...
*** Sorting maximal pairs ...
*** Determining differences ...
*** Printing edits ...
a12.5 I s12.5-12.57:field_declaration
a179.9 I s185.9-185.71:executable_statement
a193.5 I s201.9-203.9:executable_statement
a272.13 I t279.13-280.33f267.13-268.30[267.17'lineNum'~>279.17'endLineNum',268.17'columnNum'~>280.17'endColumnNum']:statement_sequence_member,statement_sequence_member
a340.68 I s352.68-352.68:',' s352.70-352.70:INTEGER s352.71-352.71:',' s352.73-352.73:INTEGER
a423.13 I t436.13-509.38f450.17-518.35[482.17'hlevel'~>468.13'endLineNum',518.17'hname'~>509.13'endColumnNum']:executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement,executable_statement
a423.84 I s513.84-513.84:',' s513.86-513.95:IDENTIFIER s513.96-513.96:',' s513.98-513.109:IDENTIFIER
s424.13-424.59:expression_statement S s514.25-514.47:expression_statement
s429.13-429.64:local_variable_declaration S s515.25-515.87:local_variable_declaration
s430.13-430.71:executable_statement f431.13-431.69[431.13'lineString'~>79.9'config',431.26'lineString'~>79.18'config',431.47'indexOfSpace'~>79.35'end_index']t79.9-79.56:executable_statement s432.13-432.51:executable_statement D a516.25
a433.13 I s516.25-519.25:executable_statement n433.13-439.13:executable_statement s433.13-433.14:'if' s433.16-433.16:'(' s433.17-433.30:relational_expression s433.31-433.31:')' s433.33-433.45:executable_statement s434.13-434.16:'else' n434.18-439.13:block s434.18-434.18:'{' n435.17-438.49:statement_sequence f435.17-435.71[435.17'lineString'~>79.9'config',435.28'lineString'~>79.18'config',435.49'indexOfSpace'~>79.35'end_index']t79.9-79.56:executable_statement s436.17-436.28:executable_statement s437.17-437.51:executable_statement s438.17-438.49:executable_statement s439.13-439.13:'}' D a516.25
a442.13 I s520.25-520.54:executable_statement

高レベルの編集アクションは「I」、「S」、「R」、「D」で、I / S / R / D文字の左側または右側に追加、挿入、または削除された内容の詳細が線で示されています。列の精度。たとえば、12行目の5列目で、フィールド宣言は「I」で挿入され、12行目で5列目から57列目までです。272行目で、コードのブロックが279〜280行目から「I」で挿入されました。識別子lineNumはendLineNumに置き換えられました。2番目のファイルの424行目で、表現ステートメントは514行目からの1つに「S」で置き換えられています。詳細については、Webサイトを参照してください。

Perlのようなものが必要な場合は、余分な詳細( ":"文字の後や[]内のもの)を簡単に取り除くことができます。

于 2010-11-09T22:39:48.937 に答える