dif

diff este un program Unix care compară diferențele dintre două fișiere text linie cu linie sau secțiune cu secțiune.

Noțiuni de bază

diff este o funcție de bază a liniei de comandă a unui sistem Unix. O gamă largă de programe de calculator profită de acest lucru. Programul este afișat sub formă de text și este adesea denumit diff ( extensie de fișier .diff ). Formatul de ieșire permite procesarea mașinii.

Aplicațiile de gestionare a versiunilor sunt diverse: de exemplu, ieșirea diff poate fi utilizată ca intrare pentru patch-ul programului Unix , pentru a aplica modificările pe care diff le-a detectat unui alt fișier text. Există, de asemenea, o serie de programe care afișează diferențele rezultate prin diferențe într-o formă grafică clară. În plus, dif reprezintă baza tuturor funcțiilor de îmbinare .

Funcția programului

Primele versiuni ale programului au fost programate pentru a compara fișiere text. Din 1980, diff a acceptat și fișiere binare .

apel

dif se execută pe linia de comandă cu numele a două fișiere text ca parametri :

$ diff telefonliste2007.txt telefonliste2008.txt

Cele două fișiere text sunt comparate rând cu rând, ceea ce înseamnă că, chiar dacă o linie din cele două fișiere diferă doar într-un singur caracter, diff interpretează acest lucru ca o linie ștearsă și o linie nou inserată.

ieșire

Următoarele două fișiere sunt comparate folosind diff.

Telefonliste2007.txt:
Mayer, Susanne, Lager, -212
Schmid, Carola, Geschäftsleitung, -435
Schmidt, Eberhard, Vertrieb, -479
Schmitt, Marie, Labor, -804
Telefonliste2008.txt:
Mayer, Susanne, Lager, -212
Schmid, Carola, Geschäftsleitung, -435
Schmitt, Marie, Labor, -804
Waldmann, Ernst, Labor, -805
Zundel, Walter, Vertrieb, -476

Ieșirea din diff arată astfel:

3d2
< Schmidt, Eberhard, Vertrieb, -479
4a4,5
> Waldmann, Ernst, Labor, -805
> Zundel, Walter, Vertrieb, -476

Există diferite formate de ieșire. Exemplul de mai sus corespunde cu ieșirea normală ( diferență normală ) fără alte opțiuni. Liniile care încep cu un unghi, paranteză de deschidere, sunt disponibile numai în primul fișier; cele care încep cu un unghi, paranteză de închidere, sunt disponibile numai în al doilea fișier. Liniile care sunt aceleași în ambele fișiere nu sunt afișate. Blocurile individuale sunt separate prin așa-numitele comenzi de modificare , care indică ce acțiune (adăugați linii - a , modificați - c sau eliminați - d ) care trebuie efectuată în ce linii.

Așa-numitul format unificat ( dif unificat ) se obține cu opțiunea -u . Fiecare linie care apare doar în primul fișier este marcată cu un semn minus și fiecare linie care apare doar în al doilea fișier cu un semn plus. Liniile comune ambelor fișiere sunt indicate printr-un spațiu.

De obicei, nu toate liniile sunt afișate, ci doar blocuri de linii care sunt aproape de o diferență. La începutul ieșirii există două linii, care sunt marcate cu trei semne minus și, respectiv, trei semne plus. Acestea arată fișierele cărora li se aplică dif. Fiecare bloc începe cu o linie înconjurată de un semn at (@) . Aceasta arată liniile în care începe blocul corespunzător în ambele fișiere și, separate prin virgulă, cât timp este în fișierul respectiv.

Ieșirea exemplului de mai sus în format unificat de dif:

--- telefonliste2007.txt    2007-12-28 13:12:34.000000000 +0100
+++ telefonliste2008.txt    2008-07-28 14:16:26.000000000 +0100
@@ -1,4 +1,5 @@
 Mayer, Susanne, Lager, -212
 Schmid, Carola, Geschäftsleitung, -435
-Schmidt, Eberhard, Vertrieb, -479
 Schmitt, Marie, Labor, -804
+Waldmann, Ernst, Labor, -805
+Zundel, Walter, Vertrieb, -476

poveste

Programul a fost dif la începutul anilor 1970 pe Unix - sistem de operare de la AT & T Bell Labs dezvoltate în Murray Hill, New Jersey, Statele Unite ale Americii. Versiunea finală care a mers cu acest sistem foarte timpuriu Unix a fost scrisă în întregime de Douglas McIlroy . Aceste investigații au fost publicate în 1976 într-un document co-autor de James W. Hunt , care a scris și una dintre versiunile inițiale ale dif.

Lucrarea lui McIlroy a fost influențată de programul de comparație al lui Steve Johnson pe GECOS și programul de probă al lui Mike Lesk , care, ca și dif, a apărut și pe Unix . Dovada a produs modificări linie cu linie, cum ar fi diferența și parantezele unghiulare utilizate („>” și ​​„<”) pentru a afișa inserțiile de linie și ștergerile de linie în ieșirea programului. Metoda euristică utilizată de aceste programe a fost considerată nesigură. Utilitatea potențială a diferitelor instrumente a inspirat-o pe McIlroy să dezvolte un program nou, mai robust, care să aibă o varietate de lucruri, dar totuși o performanță bună în limitele procesorului și memoriei PDP-11 - Hardware livrat. Succesul său a fost rezultatul colaborării cu oamenii de la Bell Labs, inclusiv Alfred V. Aho , Elliot Pinson , Jeffrey Ullman și Harold S. Stone .

Implementări de software gratuit

Image
Instrumentul grafic de difuzare Kompare

Proiectul GNU oferă o implementare a diff (și diff3, care compară trei fișiere) în pachet .

Mai multe instrumente care rulează pe diferite platforme se bazează pe motorul de difuzoare al proiectului GNU și reprezintă un front-end grafic pentru aceleași informații. Unele dintre aceste programe pot edita și îmbina fișiere.

Vezi si

  • Kompare  - o interfață grafică de utilizator pentru dif
  • meld  - interfață grafică de utilizator foarte cuprinzătoare pentru dif
  • WinMerge  - un diff open source pentru Windows
  • patch  - contrapartida la diff, care este utilizată pentru reconstituirea fișierelor pe baza diferențelor lor
  • Codificare Delta  - o metodă de compresie a datelor în care sunt salvate doar diferențele față de fișierul original în cazul fișierelor similare, de exemplu în gestionarea versiunilor

literatură

  • James W. Hunt, M. Douglas McIlroy: Un algoritm pentru compararea diferențială a fișierelor . În: Raport tehnic de informatică . Nu. 41 . Laboratoarele Bell, iunie 1976 (engleză).
  • David MacKenzie, Paul Eggert, Richard Stallman: Compararea și combinarea fișierelor cu GNU Diff și Patch . 2002, ISBN 0-9541617-5-0 (engleză).
  • E. Myers: Un algoritm de diferență O (ND) și variațiile sale . În: Algorithmica . bandă 1 , nr. 2 , 1986, p. 251-266 (engleză, CiteSeerX ).

Link-uri web

Commons : Compararea fișierelor  - colecție de imagini, videoclipuri și fișiere audio

Dovezi individuale

  1. Compararea și combinarea fișierelor - Descrierea detaliată a formatului normal. În: Manualul difuzurilor GNU. Adus la 17 februarie 2009 .