Obtenir les numéros de ligne des différences entre deux fichiers lors d'une diff sur deux fichiers dans Windows

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

  •  30-09-2019
  •  | 
  •  

Question

Aux fins de l'examen du code, après un fichier source existante est modifiée, nous passons en revue que les lignes de code qui ont été modifiés dans les fichiers source.
Après je modifier les fichiers source dans un référentiel, je dois communiquer les lignes de code qui ont changé dans un fichier source avant de faire nos revues de code par les pairs.

Je suis capable de voir une diff visuelle en utilisant Winmerge, et je suis satisfait de ce qu'il fait pour moi, mais la seule condition pour mes collègues est tout simplement de connaître le nom du fichier et les numéros de ligne qui doivent être examinés .

Y at-il un moyen d'obtenir que les numéros de ligne d'un fichier changé? Les types de fichiers seraient fichiers source de texte, comme Javascript, Java, XML, XSL, etc.

Exemples de fichiers -

foo (nouvelle version):

a
b
c
d
e
f
g
h
i
j
k

foo (ancienne version):

a
b
C
d
h
i
k

La sortie Je cherche:

foo: 3, 5-7, 10-11

ou

foo:
3
5-7
10-11

Je suis sûr que certains programme permet. Je ne peux pas trouver un. Aucune suggestion? J'utilise actuellement Winmerge, mais tout programme qui fonctionne sur Windows ira bien avec moi. Il serait préférable que le logiciel est open-source ou freeware.

EDIT: GNU Diffutils est proche de ce que je veux, mais pas exactement mes besoins montage. En regardant les options de ligne de commande, je vois « -q » (ou « --brief ») en tant que diff simplifié, mais il est tout aussi simple. Sortie:

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

normale Sortie 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 sortie:

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

Je cherche quelque chose de plus d'informations que diff -Q, mais moins d'informations que diff -u et diff. Tous les diff ninjas là-bas qui sont au courant des différentes options pour permettre cela?

Je vais toujours comparera un nouveau fichier récemment modifié à un plus âgé. Je ne ai besoin des choses qui doivent revoir le nouveau fichier.

Était-ce utile?

La solution

GNU Diffutils est open source, libre, et a un port de Windows .

Autres conseils

Enregistrez le fichier en tant que premier x.txt et le second comme y.txt

Ensuite, exécutez:

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

Pas au courant d'une méthode native Windows, mais j'utiliser la fonction « fichiers comparer » de Textpad pour cela, et il est assez bon.

Windows natif. SD intelligente Differencer produit deltas pas sur les lignes mais sur les structures du programme, et est précis à la ligne / colonne ligne / colonne et le type d'entité de programme qui a été modifié. Il compare par l'analyse du texte source, et en utilisant la structure de code pour conduire la comparaison. . Insérer, Remplacer, Supprimer, Remplacez

: deltas sont décrits en termes d'actions d'intérêt pour les programmeurs

Voici un exemple:

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

Les actions d'édition de haut niveau sont « I », « S », « R » et « D », avec des détails sur ce qui a été ajouté, inséré ou supprimé sur les côtés gauche ou à droite du E / S / R / D caractère avec une précision line.column. Par exemple, à la ligne 12 colonne 5, un champ déclaration a été « I » nserted, juste à la ligne 12 de la colonne 5 à la colonne 57. À la ligne 272, un bloc de code était « I » nserted des lignes 279-280 avec le identifiant lineNum remplacé par endLineNum. À la ligne 424 dans le second fichier, l'instruction a été expresssion « S » ubstituted par une origine de la ligne 514. Plus de détails sur le site.

Vous pouvez facilement dépouiller les détails supplémentaires (des choses suivantes « : » caractères et à l'intérieur []). Si vous voulez quelque chose comme Perl

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top