Diff

Diff sin cambiar (izquierda) - Diff con los respectivos cambios (derecha) - Tkdiff.

En informática, diff es una utilidad para la comparación de archivos que genera las diferencias entre dos archivos o los cambios realizados en un archivo determinado comparándolo con una versión anterior del mismo archivo. Diff expone los cambios realizados por línea en los archivos de texto. Las implementaciones modernas también soportan archivos binarios.[1]​ El resultado se conoce como diff o patch ya que el mismo puede ser aplicado con el programa Unix patch. El resultado de la comparación de un archivo similar también se llama "diff". De la misma manera que se usa la palabra "grep" para describir la acción de buscar, la palabra diff se usa en la jerga como un verbo que se refiere al cálculo de cualquier diferencia. Un ejemplo de diff.

Historia

La utilidad diff fue desarrollada a comienzos de los años setenta en el sistema operativo Unix que estaba creándose en AT&T Bell Labs en Murray Hill, Nueva Jersey. La versión final, que apareció por primera vez con la 5.ª edición de Unix en 1974, fue toda ella escrita por Douglas McIlroy. Este trabajo fue publicado en un artículo de 1976 coescrito con James W. Hunt que desarrolló un prototipo inicial de diff.[2]

El trabajo de McIlroy fue precedido e influido por el programa comparison de Steve Johnson en GECOS y por el programa proof de Mike Lesk también originado en Unix y, como diff, producía cambios línea a línea e incluso utilizaba paréntesis angulares (">" y "<") para presentar las inserciones y borrados de línea en el resultado del programa. Las heurísticas utilizadas en estas primeras aplicaciones fueron, sin embargo, juzgadas como no fiables. La utilidad potencial de la herramienta diff provocó que McIlroy acometiese la investigación y diseño de una herramienta más robusta que podía usarse en una gran variedad de tareas pero que al tiempo se condujese bien en los procesos y con las limitaciones de tamaño del hardware de PDP-11. Su análisis del problema lo llevó a cabo con la colaboración de distintas personas de Bell Labs como Alfred Aho, Elliot Pinson, Jeffrey Ullman y Harold S. Stone.

En el contexto de Unix, el uso del editor de línea ed proveía diff con la habilidad natural para crear órdenes de edición útiles. Estas órdenes de edición, cuando se grababan en un archivo, podían, junto con el archivo original, ser reconstituidas completamente por ed en el archivo modificado. Esto reducía enormemente el necesario almacenamiento secundario para mantener las distintas versiones de un archivo. McIlroy consideró escribir un post-procesador para diff donde una variedad de formatos de resultados pudiesen ser diseñados e implementados, pero encontró que era más frugal y sencillo hacer que diff fuese el responsable de generar la sintaxis y la información de entrada de orden contrario aceptada por el comando ed. En 1985, Larry Wall compuso una utilidadh, patch, que generalizó y extendió la habilidad para modificar archivos con resultado diff. Los modos de Emacs permiten también convertir el formato de patches e incluso editar patches interactivamente.

En los primeros años de diff, los usos habituales eran la comparación de cambios en la fuente del código del software y el marcado de documentos técnicos, la verificación de la salida de errores de programa, la comparación de listados de sistemas de archivos y el análisis del código del montaje del ordenador. La salida apuntada por ed fue modificada para proporcionar compresión a una secuencia de modificaciones hecha a un archivo. La Source Code Control System (SCCS) y su habilidad para archivar revisiones apareció a finales de los años setenta como consecuencia de almacenar órdenes de edición de diff.

El Project Xanadu es un predecesor conceptual de diff. Era un proyecto de hipertexto concebido por primera vez en 1960 que debía incluir una versión de un sistema de seguimiento necesario para su característica de "transpointing windows". La característica subsumía las diferencias de archivos en el término expansivo "transclusión", en el que un documento incluía en él partes de otros documentos o revisiones.

Algoritmo

La operación de diff se basa en resolver el problema Problema de subsecuencia común más larga (LCS).

En el problema LCS, se tienen dos secuencias de ítems:

       a b c d f g h j q z
       a b c d e f g i j k r x y z

y se desea encontrar la secuencia más larga de ítems que se presenta en las dos secuencias originales en el mismo orden. Esto es, se quiere encontrar una nueva secuencia que pueda obtenerse de la primera secuencia eliminando algunos ítems, y de la segunda secuencia eliminando otros ítems. Se quiere también que esta secuencia sea tan larga como sea posible. En este caso es:

       a b c d f g j z

De la subsecuencia común más larga solo hay un pequeño paso para conseguir un resultado del tipo de diff:

       e   h i   q   k r x y 
       +   - +   -   + + + +

Uso

Es invocado desde la línea de comando con los nombres de dos archivos: diff original new. El resultado del comando representa los cambios requeridos para hacer que el archivo original se convierta en el nuevo archivo.

Si original y nuevo son directorios, entonces diff se ejecutará sobre cada archivo que exista en ambos directorios. Una opción, -r, hará que cualesquiera subdirectorios emparejados comparen archivos entre directorios.

Todos los ejemplos en el artículo usan los archivos original y nuevo:

original:

Esta parte del
documento ha permanecido 
igual de versión a
versión. No debería 
ser mostrada si no 
cambia. Ya que eso
no ayudaría a 
comprimir el tamaño de los
cambios.

Este párrafo contiene
texto que está anticuado.
Será borrado en 
breve.

Es importante revisar
deternidamente este documento. Por
otro lado, una
palabra mal escrita no es
el fin del mundo.
Nada de lo que hay en lo que queda
de este párrafo necesita
ser cambiado. Cualquier cosa puede
añadirse después de él.

nuevo:

Esta es una importante
noticia. ¡Debería
por lo tanto situarse al 
comienzo de este
documento!

Esta parte del
documento ha permanecido 
igual de versión a
versión. No debería 
ser mostrada si no 
cambia. Ya que eso
no ayudaría a
comprimir nada.

Es importante revisar
detenidamente este documento. Por
otro lado, una
palabra mal escrita no es
el fin del mundo.
Nada de lo que hay en lo que queda
de este párrafo necesita
ser cambiado. Cualquier cosa puede
añadirse después de él.

Este párrafo contiene
importantes nuevas adiciones
a este documento.

El comando diff original nuevo produce el siguiente resultado diff normal:

0a1,6
> Esta es una importante
> noticia. ¡Debería
> por lo tanto situarse al 
> comienzo de este
> documento!
>
8,14c14
< comprimir el tamaño de los
< cambios.
<
< Este párrafo contiene
< texto que está anticuado.
< Será borrado en
< breve.
---
> comprimir nada.
17c17
< deternidamente este documento. Por
---
> detenidamente este documento. Por
24a25,28
>
> Este párrafo contiene
> importantes nuevas adiciones
> a este documento.

En este formato de salida tradicional, a sustituye a añadido, d a borrado (deleted) y c a cambiado. Los números de línea del archivo original aparecen antes de a/d/c y los del archivo modificado después. Los paréntesis angulares aparecen al comienzo de las líneas que son añadidas, borradas o cambiadas. Las líneas añadidas se incluyen en el archivo original para aparecer en el archivo nuevo. Las líneas borradas se eliminan del archivo original para ser borradas en el archivo nuevo.

Por defecto, las líneas comunes a los dos archivos no se muestran. Las líneas que se han movido se muestran como añadidas en su nuevo lugar y como borradas en su antiguo lugar.[3]

Variantes

La mayoría de las implementaciones de diff se han mantenido aparentemente sin cambios desde 1975. Las modificaciones consisten en mejoras en el algoritmo base, la adición de características útiles al comando y el diseño de un nuevos formatos de salida. El algoritmo básico se describe en el artículo An O(ND) Difference Algorithm and its Variations de Eugene W. Myers[4]​ y en A File Comparison Program de Webb Miller and Myers.[5]​ El algoritmo fue descubierto independientemente y descrito en Algorithms for Approximate String Matching, de E. Ukkonen.[6]​ Las primeras ediciones del programa diff fueron diseñadas para la comparación de líneas de archivos de texto dejando que el carácter newline delimitase las líneas. En los años ochenta, la ayuda para los archivos binarios dio lugar a un cambio en el diseño y la implementación de la aplicación.

Edit script

Un edit script puede generarse por medio de versiones modernas de diff con la opción -e. option. El edit script resultante para el ejemplo anterior es el siguiente:

24a

Este párrafo contiene
importantes nuevas adiciones
a este documento.
.
17c
detenidamente este documento. Por
.
8,14c
comprimir nada.
.
0a
Esta es una importante
noticia! Debería
por lo tanto ser situada al
comienzo de este
documento! 
.

Referencias

  1. MacKenzie et al. "Binary Files and Forcing Text Comparison" in Comparing and Merging Files with GNU Diff and Patch. Descargado el 28 de abril de 2007. [1]
  2. James W. Hunt and M. Douglas McIlroy (June 1976). «An Algorithm for Differential File Comparison». Computing Science Technical Report, Bell Laboratories 41. 
  3. David MacKenzie, Paul Eggert, and Richard Stallman (1997). Comparing and Merging Files with GNU Diff and Patch. ISBN 0-9541617-5-0. 
  4. E. Myers (1986). «An O(ND) Difference Algorithm and Its Variations». Algorithmica 1 (2): 251-266. 
  5. Webb Miller and Eugene W. Myers (1985). «A File Comparison Program». Software — Practice and Experience 15 (11): 1025-1040. doi:10.1002/spe.4380151102. 
  6. E. Ukkonen (1985). «Algorithms for Approximate String Matching». Information and Control 64: 100-118. doi:10.1016/S0019-9958(85)80046-2. 

Véase también

Enlaces externos

Read other articles:

Visible part of the ear that is outside the head Auricle is the former name of the atrium (heart) and is still used to describe this chamber in some other animals AuricleThe auricula. Lateral surface.DetailsArteryposterior auricular, anterior auricularNerveTrigeminal nerve, great auricular nerve, lesser occipital nerveLymphTo pre- and post-auricular nodes, nodes of parotid and cervical chainsIdentifiersLatinauriculaMeSHD054644TA98A15.3.01.002TA2104, 6863FMA56580Anatomical terminology[edit...

 

 

Beyond BordersPoster layar lebar untuk Beyond BordersSutradaraMartin CampbellProduserDan HalstedLloyd PhillipsDitulis olehCaspian Tredwell-OwenPemeranAngelina JolieClive OwenTeri PoloKate AshfieldPenata musikJames HornerSinematograferPhilip MeheuxPenyuntingNicholas BeaumanPerusahaanproduksiMandalay PicturesDistributorParamount PicturesTanggal rilis 24 Oktober 2003 (2003-10-24) (U.S.) Durasi127 menitNegaraAmerika SerikatBahasaInggrisAnggaran$35 jutaPendapatankotor$11,705,002 (se...

 

 

KTT BRICS ke-6Sexta cúpula do BRICSTuan rumahBrasilTanggal14–16 Juli 2014[1]TempatCentro de Eventos do Ceará[2]KotaFortaleza & Brasília[3]PesertaBRICSSebelumnyaKTT BRICS ke-5SelanjutnyaKTT BRICS ke-7Situs webbrics6.itamaraty.gov.br KTT BRICS ke-6 adalah pertemuan diplomatik keenam BRICS, kelompok ekonomi besar baru yang terdiri dari Brasil, Rusia, India, Tiongkok, dan Afrika Selatan. Konferensi ini diadakan di Brasil, negara tuan rumah pertama dalam siklus KTT...

معاهدة دونكيركمعلومات عامةالنوع عقد بدء التنفيذ 8 سبتمبر 1947 الأطراف المملكة المتحدة — فرنسا اللغة الإنجليزية تعديل - تعديل مصدري - تعديل ويكي بيانات معاهدة دونكيرك أو تحالف دونكيرك هو معاهدة تحالف متبادلة بين فرنسا وبريطانيا ضد أي هجوم ألماني محتمل في أعقاب الحرب العالمي�...

 

 

Questa voce sull'argomento stagioni delle società calcistiche italiane è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia. Segui i suggerimenti del progetto di riferimento. Voce principale: Associazione Calcio Cesena. Associazione Calcio CesenaStagione 1964-1965Sport calcio Squadra Cesena Allenatore Renato Lucchi Presidente Dino Manuzzi Serie C9º posto nel girone B Maggiori presenzeCampionato: Dianti (34) Miglior marcatoreCampionato: Gabetto (11) 1...

 

 

The Municipality of Minalin Pampanga Philippines Municipality in Central Luzon, PhilippinesMinalinMunicipalityMunicipality of MinalinSta. Monica Parish Church FlagSealNickname: Egg basket of Central LuzonMotto: Minaleño First/Panyulung MinalinAnthem: Himno ning Minalin (Minalin Hymn)Map of Pampanga with Minalin highlightedOpenStreetMapMinalinLocation within the PhilippinesCoordinates: 14°58′N 120°41′E / 14.97°N 120.68°E / 14.97; 120.68CountryPhilippi...

Holiday celebrated in mid-April For related Thai festival, see Songkran (Thailand). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Lao New Year – news · newspapers · books · scholar · JSTOR (April 2017) (Learn how and when to remove this template message) Lao New Year / Pi Mai Lao / ປີໃໝ່ລາວ...

 

 

Danish football coach and former player (born 1980) Martin Retov Retov playing for Horsens in 2012Personal informationDate of birth (1980-05-05) 5 May 1980 (age 43)Place of birth Rødovre, DenmarkHeight 1.78 m (5 ft 10 in)Position(s) MidfielderTeam informationCurrent team Horsens (Manager)Youth career1989–1995 Rishøj1995–1999 Køge BoldklubSenior career*Years Team Apps (Gls)1999–2002 Køge Boldklub 89 (12)2002–2008 Brøndby 220 (23)2008–2010 Hansa Rostock 55 (4)...

 

 

Karolus AgungLukisan Kaisar Karolus Agung.Pendiri Kekaisaran Romawi SuciBerkuasa25 Desember 800 – 28 Januari 814Penobatan25 Desember 800Basilika St. Petrus Lama, RomaPendahuluPippin III (Raja Frankia)PenerusLudwig IRaja bangsa LombardiaBerkuasa10 Juli 774 – 28 Januari 814Penobatan10 Juli 774PaviaPendahuluDesideriusPenerusLouis IRaja bangsa FrankiaBerkuasa9 Oktober 768 – 28 Januari 814Penobatan9 Oktober 768NoyonPendahuluPippin IIIPenerusLouis IInformasi pribadiKelahiran2 April 743[1&...

Запрос «Пугачёва» перенаправляется сюда; см. также другие значения. Алла Пугачёва На фестивале «Славянский базар в Витебске», 2016 год Основная информация Полное имя Алла Борисовна Пугачёва Дата рождения 15 апреля 1949(1949-04-15) (75 лет) Место рождения Москва, СССР[1]...

 

 

American football player (born 1986) This article is about the American football player. For other people named Mark Sanchez, see Mark Sanchez (disambiguation). American football player Mark SanchezSanchez in 2021No. 6, 3Position:QuarterbackPersonal informationBorn: (1986-11-11) November 11, 1986 (age 37)Long Beach, California, U.S.Height:6 ft 2 in (1.88 m)Weight:232 lb (105 kg)Career informationHigh school:Mission Viejo(Mission Viejo, California)College:USC (200...

 

 

Geologic formation across the Colorado Plateau, USA Wingate SandstoneStratigraphic range: Rhaetian-Hettangian~206–199 Ma PreꞒ Ꞓ O S D C P T J K Pg N Wingate Sandstone cliffs in the San Rafael Swell, UtahTypeGeological formationUnit ofGlen Canyon GroupUnderliesKayenta FormationOverliesChinle FormationLithologyPrimaryEolian sandstoneLocationCoordinates39°06′N 109°06′W / 39.1°N 109.1°W / 39.1; -109.1Approximate paleocoordinates17°42′N 48°18′Wþ...

Mimi Parent con fratelli e sorelle Maria (Mimi) Parent Benoît (Montréal, 8 settembre 1924 – Ollon, 14 giugno 2005) è stata una pittrice canadese di matrice surrealista. Indice 1 Biografia 2 Alcune opere 3 Esposizioni principali 4 Note 5 Bibliografia 6 Voci correlate 7 Collegamenti esterni Biografia Marie Parent, detta Mimi, era l'ottava dei nove figli dell'architetto Lucien Parent (1893-1956). Dopo la scuola dell'obbligo presso il convento delle Dames du Sacré-Cœur,[1] dal 1942...

 

 

United Nations peacekeeping mission to secure elections in Namibia while occupied by South Africa United Nations Transition Assistance GroupAbbreviationUNTAGTypePeacekeeping MissionLegal statusCompletedSpecial RepresentativeMartti AhtisaariParent organizationUN Security CouncilWebsitehttps://peacekeeping.un.org/sites/default/files/past/untag.htm The United Nations Transition Assistance Group (UNTAG) was a United Nations (UN) peacekeeping force deployed from April 1989 to March 1990 in Namibia...

 

 

Google's Android Tablet computer This article is about the Google Android device. For Philip K. Dick's fictional Nexus-9 androids, see Replicant. Nexus 9Also known asVolantis or FlounderDeveloperGoogle, HTCManufacturerHTCProduct familyGoogle NexusTypeTablet computerRelease dateNovember 3, 2014Introductory price16 GB: US$399 32 GB: US$479DiscontinuedMay 26, 2016 (2016-05-26)[1]Operating systemOriginal: Android 5.0 LollipopLast: Android 7.1.1 NougatSystem on a c...

يفتقر محتوى هذه المقالة إلى الاستشهاد بمصادر. فضلاً، ساهم في تطوير هذه المقالة من خلال إضافة مصادر موثوق بها. أي معلومات غير موثقة يمكن التشكيك بها وإزالتها. (ديسمبر 2018) جبل أهنم تقسيم إداري البلد  اليمن مديرية مديرية الرجم المسؤولون محافظة محافظة المحويت خصائص جغرافية إ...

 

 

Type of laboratory equipment used to prevent contamination of samples Laminar flow cabinetLaminar flow cabinetUsesParticulate removalRelated itemsBiosafety cabinetFume hood Preparation of microbiological samples in a laminar chamber A laminar flow cabinet or tissue culture hood is a partially enclosed bench work surface designed to prevent contamination of biological samples, semiconductor wafers, or any particle sensitive materials. Air is drawn through a HEPA filter and blown in a very smoo...

 

 

Football in ScotlandSeason1901–02 ← 1900–01 1902–03 → 1901–02 in Scottish footballDivision One championsRangersDivision Two championsPort Glasgow AthleticScottish Cup winnersHibernianJunior Cup winnersRutherglen GlencairnScotland national team1902 BHC The 1901–02 season the 29th season of competitive football in Scotland and the 12th season of the Scottish Football League. League competitions Scottish League Division One Main article: 1901–02 Scottish Divisi...

Voce principale: Udinese Calcio. Associazione Calcio UdineseStagione 1949-1950Sport calcio Squadra Udinese Allenatore Aldo Olivieri Presidente Giuseppe Bertoli Serie B2º posto. Promossa in Serie A. Maggiori presenzeCampionato: Brandolin (41) Miglior marcatoreCampionato: Darin (19) 1948-1949 1950-1951 Si invita a seguire il modello di voce Questa voce raccoglie le informazioni riguardanti l'Associazione Calcio Udinese nelle competizioni ufficiali della stagione 1949-1950. Indice 1 Rosa ...

 

 

Subprefecture and commune in Normandy, France For the town in Canada, see Lisieux, Saskatchewan. Subprefecture and commune in Normandy, FranceLisieuxSubprefecture and communeTown hall Coat of armsLocation of Lisieux LisieuxShow map of FranceLisieuxShow map of NormandyCoordinates: 49°09′N 0°14′E / 49.15°N 0.23°E / 49.15; 0.23CountryFranceRegionNormandyDepartmentCalvadosArrondissementLisieuxCantonLisieuxIntercommunalityCA Lisieux NormandieGovernment •...