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
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
-
Pagini Man :
-
diff: comparați două fișiere - Deschideți specificațiile de bază ale grupului -
diff(1): Comparați fișierele rând cu rând - Debian GNU / Linux Executables sau Shell Commands man page -
diff(1): comparator diferențial de fișiere și directoare - OpenBSD General Commands Manual
-
- Catalog de linkuri pe Diff la curlie.org (fost DMOZ )
Dovezi individuale
- ↑ Compararea și combinarea fișierelor - Descrierea detaliată a formatului normal. În: Manualul difuzurilor GNU. Adus la 17 februarie 2009 .