احصل على أرقام خطوط الاختلافات في ملفين عند إجراء DEF على ملفين في Windows

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

  •  30-09-2019
  •  | 
  •  

سؤال

لأغراض مراجعة التعليمات البرمجية ، بعد تعديل ملف مصدر موجود ، نقوم فقط بمراجعة خطوط التعليمات البرمجية التي تم تغييرها في هذه الملفات المصدر.
بعد إجراء تغييرات على ملفات المصدر في مستودع ، يجب أن أقوم بتوصيل خطوط التعليمات البرمجية التي تغيرت في ملف مصدر قبل أن نقوم بمراجعات رمز الأقران لدينا.

أنا قادر على رؤية فرق مرئي يستخدم Winmerge ، وأنا سعيد بما يفعله بالنسبة لي ، لكن الشرط الوحيد لزملائي في العمل هو ببساطة معرفة اسم الملف وأرقام الأسطر التي تحتاج إلى مراجعتها.

هل هناك طريقة للحصول على أرقام سطر الملف المتغير فقط؟ ستكون أنواع الملفات هي ملفات مصدر النص ، مثل JavaScript و Java و XML و XSL ، إلخ.

عينة من الملفات-

فو (إصدار جديد):

a
b
c
d
e
f
g
h
i
j
k

فو (الإصدار القديم):

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

إخراج 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 والثاني كـ 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 ، لكني أستخدم ميزة "Compare Files" الخاصة بـ TextPad لهذا الغرض ، وهي جيدة جدًا.

ويندوز الأصلي. ملكنا SD SMART DEBILERNENCER ينتج دلتا ليس على خطوط ولكن على هياكل البرنامج ، وهو دقيق فيما يتعلق بخط/عمود العمود/العمود ونوع كيان البرنامج الذي تم تحريره. يقارن عن طريق تحليل النص المصدر ، واستخدام بنية الكود لقيادة المقارنة. يتم وصف 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 معرف الكتان يحل محله endlinenum. في السطر 424 في الملف الثاني ، تم "S expresssion" "s" ubstitated بواسطة واحد في الأصل من السطر 514. مزيد من التفاصيل في الموقع.

يمكنك بسهولة تجريد تفاصيل إضافية (أشياء متابعة ":" الأحرف وداخل []) إذا كنت تريد شيئًا مثل Perl.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top