Получите номера линии различий в двух файлах при выполнении разных файлов в Windows

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

  •  30-09-2019
  •  | 
  •  

Вопрос

В целях обзора кода после модифицирована существующего исходного файла, мы просмотрим только строки кода, которые были изменены в этих исходных файлах.
После того, как я внесу изменения в исходные файлы в репозитории, я должен сообщить линии кода, которые изменились в исходном файле, прежде чем мы выполним обзоры нашего однорангового кода.

Я могу увидеть визуальный разфтал, используя 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 DiffuliLs близко к тому, что я хочу, но не совсем подходящую мою потребности. Глядя на варианты командной строки, я вижу «-Q» (или «- - венти») как упрощенная разница, но это слишком просто. Выход:

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. Любой различие ниндзя, кто знает о разных вариантах, чтобы это позволить этому?

Я всегда буду сравнивать новый недавно измененный файл для старшего. Мне нужны только вещи, которые нужно просмотреть в новом файле.

Это было полезно?

Решение

GNU Diffulls - это открытый источник, свободный и имеет порт окна.

Другие советы

Сохраните первый файл как x.txt и второй как y.txt

Затем запустите:

diff -i-junchanged-line-format = "¥" - New-line-format = ":% dn:% l" y.txt x.txt | Perl -pe 'S / ¥ / N / G' | Perl -pe '$ count ++; Если ($ _! ~ / ^ n $ /) {print "$ count t";} '

Не осознавая метод Windows-Native, но я использую функцию «Сравнить файлы» «Сравнить файлы», и это довольно хорошо.

Windows родная. Наш SD Smart Diftence Выпускает Deltas не на строках, а на программных структурах, а также точен в зависимости от линии / столбца / столбца и в типе объекта программы, который был отредактирован. Он сравнивается путем разбора исходного текста и используя структуру кода для привода сравнения. Deltas описаны с точки зрения действий, представляющих интерес для программистов: вставить, заменить, удалять, заменять.

Вот пример:

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» NSerted, только в строке 12 из столбца 5 к столбцу 57. В строке 272 блок кода был «я» нерешительно из строк 279-280 Идентификатор Linenum заменен на endlineum. На строке 424 во втором файле оператор ExpressSion был «S» UBSTICED, изначально из строки 514. Подробнее на сайте.

Вы можете легко распределить дополнительные детали (материал, следующие »:« Символы и внутри []), если вы хотите с чем-то вроде Perl.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top