Windowsの2つのファイルでDIFFを実行するときに、2つのファイルの違いの行数を取得します
質問
コードレビューの目的で、既存のソースファイルが変更された後、これらのソースファイルで変更されたコードの行のみを確認します。
リポジトリ内のソースファイルに変更を加えた後、ピアコードレビューを行う前にソースファイルで変更されたコードの行を通知する必要があります。
Winmergeを使用して視覚的なDiffを見ることができます。それが私のために何をするかに満足していますが、同僚にとって唯一の要件は、単にファイル名とレビューする必要がある行番号を知ることです。
変更されたファイルのライン番号のみを取得する方法はありますか?ファイルの種類は、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」)が簡素化されたdiffと見なされますが、あまりにも単純です。出力:
C:\Program Files\GnuWin32\bin>diff.exe -q foo1.txt foo2.txt
Files foo1.txt and foo2.txt differ
通常のDIFF出力:
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よりも有益ではありません。これを許可するさまざまなオプションを知っている違いはありますか?
私は常に、最近変更された新しいファイルを古いファイルと常に比較します。新しいファイルでレビューする必要があるものだけが必要です。
解決
GNU Diffutilsはオープンソースで無料で、 Windowsポート.
他のヒント
最初のファイルを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";} '
Windows-Nativeメソッドを認識していませんが、TextPadの「ファイルの比較」機能を使用していますが、かなり良いです。
ネイティブのWindows。私たちの SD Smart Diferencer ラインではなくプログラム構造でデルタを生成し、編集されたプログラムエンティティのライン/列 - 列/列のタイプに関して正確です。ソーステキストを解析し、コード構造を使用して比較を促進することによって比較されます。デルタは、プログラマーにとって関心のある行動の観点から説明されています:挿入、交換、削除、代替。
これが例です:
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文字の左側または右側に追加、挿入、削除されたものの詳細があります。 .Column Precision。たとえば、12行目の列5では、フィールドデクレートは「I」nSertedで、列5から列57まで12行目にありました。272行目では、コードのブロックが「I」で「I」が279-280行から「I」nSertedが掲載されていました。識別子リネナムはEndlinenumに置き換えられました。 2番目のファイルの424行目では、Expresssionステートメントは、514行目から最初に1つによって「S」されています。詳細については、Webサイトの詳細。
Perlのようなものが必要な場合は、余分な詳細を簡単に削除できます( ":" ":" ":" inthers [])。