Erhalten Sie Zeilennummern von Unterschieden in zwei Dateien, wenn ein diff auf zwei Dateien in Windows durchführen

StackOverflow https://stackoverflow.com/questions/4139083

  •  30-09-2019
  •  | 
  •  

Frage

Für die Zwecke des Code-Review, nachdem eine vorhandene Quelldatei geändert wird, wir nur Zeilen Code überprüfen, die in den Quelldateien geändert wurden.
Nachdem ich Änderungen an Quelldateien in einem Repository zu machen, muß ich die Codezeilen kommunizieren, die in einer Quelldatei geändert haben, bevor wir unseren Peer Code-Reviews zu tun.

Ich bin in der Lage eine visuelle diff mit WinMerge zu sehen, und ich bin glücklich mit dem, was es tut, für mich, aber die einzige Voraussetzung für meine Mitarbeiter ist einfach den Dateinamen und die Zeilennummern zu kennen, die überprüft werden müssen .

Gibt es eine Möglichkeit nur die Zeilennummern von einer geänderten Datei zu bekommen? Die Arten von Dateien würden Textquelldateien, wie Javascript, Java, XML, XSL, usw.

sein

Beispieldateien -

foo (neue Version):

a
b
c
d
e
f
g
h
i
j
k

foo (alte Version):

a
b
C
d
h
i
k

Der Ausgang Ich suche nach:

foo: 3, 5-7, 10-11

oder

foo:
3
5-7
10-11

Ich bin sicher, dass einige Programm dies zulässt. Ich kann einfach nicht finden. Irgendwelche Vorschläge? Ich bin derzeit mit WinMerge, aber jedes Programm, das unter Windows ausgeführt wird, mit mir in Ordnung sein. Es wäre besser, wenn die Software Open-Source oder Freeware ist.

EDIT: GNU Diffutils ist in der Nähe, was ich will, aber nicht genau passend meine Bedürfnisse. Mit Blick auf die Kommandozeilenoptionen, sehe ich „-q“ (oder „--brief“) als vereinfachte diff, aber es ist einfach TOO. Ausgang:

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

Normal diff Ausgabe:

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 Ausgabe:

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

Ich bin auf der Suche nach etwas informativer als diff -q, aber weniger informativ als diff -u und diff. Etwaige diff Ninjas gibt, die von verschiedenen Optionen bewusst sind, damit das?

Ich werde immer eine neue, kürzlich geänderte Datei zu einem älteren werden zu vergleichen. Ich brauche nur die Dinge, die Notwendigkeit, sich auf die neue Datei zu überprüfen.

War es hilfreich?

Lösung

GNU Diffutils ist Open Source, kostenlos und hat ein Windows-Port .

Andere Tipps

Speichern der ersten Datei als x.txt und die zweite als y.txt

Dann laufen:

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";}

Nicht Kenntnis von einer nativen Windows-Methode, aber ich benutze Textpad die „Dateien vergleichen“ -Funktion für das, und es ist ziemlich gut.

native Windows. SD Smart-Differenzierer produziert Deltas nicht auf Linien, sondern auf Programmstrukturen und ist genau wie auf Linie / Spalte-Zeile / Spalte und die Art der Programmeinheit, die bearbeitet wurde. Es vergleicht durch den Quelltext Parsen und unter Verwendung der Codestruktur des Vergleichs zu steuern. Deltas sind in Bezug auf die Maßnahmen im Interesse Programmierer beschrieben. Einfügen, Ersetzen, Löschen, Ersetzen Sie

Hier ist ein Beispiel:

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

Die High-Level-Bearbeitung Aktionen sind "I", "S", "R" und "D", mit Details über das, was hinzugefügt wurde, eingefügt oder gelöscht links oder rechte Seite des I / S / R / D Charakter mit line.column Präzision. Zum Beispiel in Zeile 12 die Spalte 5, wurde ein Felddeklarations „I“ nserted nur in Zeile 12 von Spalte 5 bis Spalte 57. In Zeile 272, ein Code-Block wurde „I“ von den Leitungen 279-280 mit dem nserted Identifikator lineNum ersetzt durch endLineNum. In Zeile 424 in der zweiten Datei, die Anweisung express wurde „S“ ubstituted von einer ursprünglich von der Linie 514. Mehr Details auf der Website.

Sie können ganz einfach zusätzliche Details Streifen aus (Sachen folgenden „:“ Zeichen und innen []). Wenn Sie mit so etwas wie Perl wollen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top