Sárga levél - Cikk - használat parancsok diff és patch

Parancsok diff tapasz olyan hatékony kombinációja. Gyakran használják, így a különbség az eredeti és a frissített fájlokat, hogy más emberek, akik csak most az eredeti fájlokat lehet frissíteni őket a fájlokat, amelyek csak a különbséget. Ez a cikk bemutatja az alapelvek segítségével ezeket a parancsokat.

Segítségével diff létrehozni egy egyszerű javítás

A legegyszerűbb példa a diff parancs - egyre a különbség a két kép, egy eredeti és frissítik. Akkor például, írjuk le a szavakat sima szöveget, hogy bármilyen változás, és mentse a változásokat a második fájlban. Most lehet összehasonlítani a két fájlt használ diff parancs:

Persze, ki kell cserélni originalfile és updatedfile megfelelő fájlneveket. Az eredmény a következőképpen néz ki:

Megjegyzés: Annak igazolására, hogy hozzanak létre egy egyszerű tapasz, én is használtam az eredeti fájlt tartalmazó string „Ezek néhány szót.” És a kép, amely a húr „Ezek még csak néhány szót.” Akkor létre ezeket a fájlokat magad, ha azt szeretné, hogy fut a cikket, és ugyanazt az eredményt kapjuk.

1c1 mutatja a sor számát, és az a tény, hogy meg kell tenni. Vegye figyelembe, hogy előfordulhat, hogy több sor (például, 12,15, ami azt jelenti, hogy a 12 vezetéken 15. sor). A „C” szimbólum azt jelzi, hogy a tapasz váltja ezt a vonalat. Van még két másik karakter: „a” és „d”. Azt jelenti, "add" (hozzáadás) és a "törlés" (törlés), ill. Így a következő szintaxist: (sorszám vagy tartomány) (c, a vagy d) (sorszám vagy tartomány), de ha alkalmazzuk „a” vagy „d”, az egyik rész (sorszám vagy tartomány) is ez csak egyetlen sor számát.

Amikor a „c”, a sorszámok a bal oldalon - ez egy sort az eredeti fájlt, amelyet ki kell cserélni vonalak, amelyek a tapaszt, és a sorok száma a jobb oldalon - ez a sor, hogy kell javítani fájlt.

Ha az „a”, a szám a bal oldalon lehet csak egy sorszám, ami azt mutatja, hogy van hozzá egy sort a folt változat a fájl és sorszámok a jogot - ez a sor, hogy kell javítani fájlt.

Amikor a „d”, a sorszámok a bal oldalon - egy szöveget kell távolítani, hogy a folt változat a fájl és a sor száma a jobb oldalon csak egy sorszám, ami azt mutatja, ahol a vonal lesz a javított fájlokat, ha el kell hagyni. Azt gondolhatnánk, hogy az utolsó számot nem szükséges, de ne felejtsük el, hogy a tapasz alkalmazható az újbóli létrehozását az eredeti fájlt. Ezt később ismertetjük.

jel "<" означает, что патч должен удалить символы после этого знака, а знак ">. „Azt jelenti, hogy a karakterek után ez a jel hozzá kell adni, ha ki kell cserélni egy string (” c „között sor számok), látni fogja a két megjelölés: a”<", и ">. „Ha meg kell adni egy sort (” a »között sor számok), akkor csak a jel«> „és amikor szükség van, hogy távolítsa el a vonal (” d »a sorban számok), akkor csak a jel«<".

A string „\ Nincs újsor a fájl végén” meg annak a ténynek köszönhető, hogy én még nem nyomta meg az enter után beírt szó. Úgy vélik, jó formában, hogy befejezze a szöveget egy üres sort. Néhány programnak szüksége, hogy működjön. Ezért ez a vonal után megjelent a diff parancs. Adjon hozzá egy üres sort a fájl végéhez, és szerezzen be egy rövidebb kimenete diff:

Ahogy talán már észre, én nem magyarázható, mit jelent a 3 „-” jel. Azt jelenti, a végén a húrok, hogy ki kell cserélni, és a sor elejére, amelyen ki kell cserélni. Elkülönítése a régi és az új vonalak. Látni fogja a jele Csak csere ( „c” között a sorszámok).

Ismét ne felejtsük el, hogy cserélje ki, és originalfile updatedfile a megfelelő fájl nevét. Ön valószínűleg tudja, hogy a bash opció „>” működik az összes csapat. Ez egy nagyon hasznos funkció.

A használata egyszerű tapasz, hogy hoztunk létre

Mi lehet használni a tapaszt, hogy csak létre, hogy folyamatosan az eredeti fájlt. Ehhez másolja az eredeti fájlt és patch ugyanazon a helyen. És akkor kell a tapaszt felhelyezni:

Természetesen itt is meg kell változtatni a fájl nevét a szükség. Ha minden jól megy, azt kell, hogy egy fájl, amely azonos a frissítés. Ennek ellenőrzéséhez használja a diff parancsot a „-s” opció:

Cserélje ki a szöveg között, [és] együtt az utat, hogy az eredeti fájlt. Például, ha a frissített fájl létrehozásához használt a tapaszt a szülő könyvtár az aktuális Witzlaus, a „[/ path / to / a / eredeti / updatedfile]” szövegrész helyébe a „..” (bash érti a szülő könyvtár az aktuális ). És természetesen meg kell változtatni a nevét a fájlok a jobb oldalon.

Gratulálunk! Ha diff számolt be, hogy azonos fájlok imént sikeresen létrehozta és alkalmazta a patch! Ugyanakkor a tapasz formában, amit most használunk, nem az egyetlen. A következő fejezetben fogunk nézni egy másik tapaszt formátumban.

Az első fejezetben létrehoztunk egy patch a normál diff parancs formátumban. Azonban ez a méret nem nyújt kontextuális függőségét, és használja a teljes vonalon. Hozzon létre egy patch ugyanaz a fájl, de kontektsny méret:

Az eredmény a következő lesz:

Mint látható itt, beleértve a fájl nevét. Ez azt jelenti, hogy nem kell beírni, míg a tapasz felhelyezése. Következik a dátum és az idő az utolsó módosítás. 15. sor: „*” jelzi a kezdetét a változásokat. Ezek azt mutatják, hogy szükség van, hogy a következő szövegrészt. Két szoba 1 - a sorok számát (itt is lehet néhány sor), illetve a „!” Ez azt jelenti, hogy a vonal ki kell cserélni. A sor „!” „!” - előtt három „” ki kell cserélni egy második húr, hogy jön három óra után „-” (. Persze nem lesz benne; ebben az összefüggésben szintaxis formátum). Mint látható, nincs jele a „c”, „a” és „d” .Deystvie hogy meg kell tenni határozza meg a szimbólumot a sor elejére. "!" Ez azt jelenti, a csere. Más karakterek - "+", "-" és "" (szóköz). „+” Means add, „-” eltávolítását jelenti, és a „” azt jelenti, hogy nem csinált semmit: Patch arra használja, hogy megbizonyosodjon arról, hogy a megfelelő része a fájl változásokat.

A javítás a könnyebb: ugyanolyan körülmények között, mint az előző tapaszt (írja a diff kimenetet egy fájlba, majd másolja a javítást, és az eredeti ugyanazon a helyen), akkor futtassa a következő parancsot:

Azt gondolhatja most: miért kell, hogy adja meg az új fájl nevét? Ezt meg kell tenni, mert az a tény, hogy a tapasz próbál változtatni a meglévő fájlt létrehozása helyett egy újat. Ez akkor hasznos, ha létre egy patch egyszerre több fájlt. Ez elvezet minket a következő célokat: a létrehozása a patch fájl fa. Vizsgáljuk meg ezt a következő fejezetben.

Előállítás közötti különbségek több fájlt

A legegyszerűbb módja annak, hogy a különbség több fájlt -, hogy őket egy könyvtárba, és futtassa diff parancsot a könyvtár teljes egészében. Egyszerűen át a parancsot diff egy könyvtár nevét helyett fájlnevek:

Megjegyzés: Ha a könyvtárban van egy alkönyvtár, szükséges, hogy a „-r” opciót.

Ennek eredményeként, akkor kap valami ilyesmit:

Mint látható, a szokásos formában tartalmazza csak a fájl nevét, és módosítsa a sor.

Most a kontextus méret:

Az első dolog, amit meg kell jegyezni -, hogy növeli a méretét; kontextus méret több információt tartalmaz, mint a normál. Ez nem volt nyilvánvaló az első premera, mert nem volt összefüggésben. Most azonban a kontextus, rovására a patch mérete nőtt. Továbbá, akkor valószínűleg észrevette, hogy a fájl nevét kétszer megismételjük. Ezt meg lehet tenni annak érdekében, hogy könnyebben érthető, amikor elkezdett a patch a következő fájlt vagy hogy jobb hasznosítás.

Egy másik módja, hogy a különbség a között, több fájl -, hogy írjon egy forgatókönyvet, amely végrehajtja a diff parancs többször, és hozzáteszi, az eredmény egy fájlban. Nem fogjuk vizsgálni ezt a módszert, hogy az összes fájl egy könyvtárban sokkal könnyebb.

Hozzon létre egy folt volt könnyű, de a használata könyvtárak jelent a következő probléma: ha a tapasz csak változtatni a megfelelő fájlokat bedut az aktuális könyvtárban, vagy használja a megfelelő utat a fájlt? Ahhoz, hogy megtudja, hogy a következő fejezetet!

Alkalmazása a patch több fájlt

Az előző fejezetben létrehoztunk egy patch több fájlt, használja az alábbi parancsot:

Megjegyzés: a kontextus tapasz formában, hiszen ez de rigueur.

Most meg kell használni a kapott tapaszt. Másolás az eredeti könyvtárat és patch valahol, és használja a következő parancsot:

Azonban van egy hiba, hogy nem találja a fájlokat a patch. A csapat megpróbálja megtalálni a fájlt fájl1 az aktuális könyvtárban (alapértelmezés szerint a tapasz eltávolítja egészen előtt a fájl neve). És koneno fájl nem, ahogy megpróbálja frissíteni a fájlokat a originaldirectory. Ezért kell, hogy a tapasz használata a teljes elérési utat. Ez úgy történik, az alábbiak szerint:

Megjegyzés: Lehet, úgy gondolja, hogy ha csak mozogni, és elkezd originaldirectory patch. De ez nem így van! Szóval nem kell tennie: ha a tapasz egy alkönyvtárat, akkor keresse meg őket a munka könyvtár, és nem is fog, vagy nem azok. Használja az „-p”, hogy a tapasz keresni fájlok alkönyvtárakat.

Az opció „-p” azt jelzi a patch hány jeleket (beleértve mi van előttük, általában egy könyvtár) kell vágni, mielőtt a fájl nevét (megjegyzendő, hogy amikor a „-p0” opciót, a patch lesz keresni a fájlokat és originaldirectory és updateddirectory) .Ha elindultunk 0, akkor ez azt jelenti, hogy nem kell törölni az utat, de ha nem tud 1 távolítsa el az első vágás, vagy 2, hogy távolítsa el a két vágás, stb Ez akkor lehet hasznos, ha használják a tapaszt, ha a könyvtár struktúrát, amely eltér a tiéd. Például, ha a könyvtár struktúrát használják a tapaszt:

Csak ki kell számolni a perjel (/ (1) home / (2) A felhasználónév / (3) forrás / (4) program / (5) bekezdés), és hogy ezt a számot optsie "-p". Ha "-p5", a patch kell törekedni originaldirectory / file1 és updateddirectory / fájl1. Ne felejtsük el, hogy a tapasz címek két perjel egymást (például a / home / felhasználónév // sources), mint egy. Ez annak a ténynek köszönhető, hogy néha a javítás script hozzá egy extra perjel között könyvtárakat.

Visszaállítani az eredeti fájlt a foltozott

Néha meg kell visszaállítani az eredeti fájlt a folt. Például, ha hibát benne foglalt. Ehhez használja a „-R” opció:

Általában ezt a műveletet zajlik hiba nélkül, és megvan az eredeti fájlt. De jobb, minden esetben, hogy egy biztonsági másolatot, mielőtt a helyreállítása a fájlokat.

Van egy másik különbség kiadási méret diff parancs: egységes formátumban. Ez sokkal kompaktabb, mert tartalmazza a kisebb kontextus sorban. Azonban ez csak a támogatott GNU diff és patch. Ha használja, meg kell bizonyosodni arról, hogy a felhasználók, akik használják a tapaszt, GNU patch. Linux lehetővé teszi a használatát ebben a formátumban.

Az egységes formátum hasonló összefüggésben, de ez nem ugyanaz a dolog. A tapaszt a egységes formátumban lehet létrehozni az alábbiak szerint:

Az eredmény az lesz seduyuschy:

Mint látható, a sorszámok között „@”. Ezen kívül van egy extra hely után a „+” vagy „-”. Ez ment egy pár byte. Egy másik különbség: egy egységes formátum, nincs külön jele a csere. Egyszerűen eltávolítja a régi vonal ( „-”) és egy új ( „+”). A különbség az, hogy ezek az intézkedések a csere használják ugyanazt a sorszámot, és amikor eltávolítja és a hozzá más.

Olvasott a három különböző formátumokat, akkor valószínűleg gondolkodás: mit válasszak? Itt egy gyors összehasonlítás:

A normál méret leginkább összeegyeztethető. Bármilyen parancsokat, mint a diff / tapaszt megérteni. Hátránya - ez a hiánya összefüggésben.

Context Format elterjedt, de nem az összes csapata megérteni. Előnye keretében az állomány.

Az egységesített formátum is összefüggésben, és így kompaktabb. De ez csak akkor támogatja a GNU diff és patch.

Ha biztos abban, hogy a tapasz csak akkor lesz használva, hogy a felhasználók a GNU diff / folt, akkor a legjobb, hogy válasszon egy szabványosított formátumot, mivel sokkal kompaktabb. A legtöbb egyéb esetben a legjobb választás - ez a kontextus formátumban. Normál formátumot kell használni, ha biztos abban, hogy a felhasználó alkalmazza a patch parancsok, amelyek nem támogatják az összefüggésben formátumban.

Változó a sorok száma a kontextus

Tudod, hogy a diff parancs tartalmazza a csomag senshee vonalak száma a kontextus, mint amilyennek lennie kellene. A nagy foltok Sillon csökkentheti annak méretét. Azonban, ha számának csökkentése összefüggésben vonalak, ami azt eredményezheti, működésképtelensége a tapaszt. Idézetek a referenciák GNU diff: „A legtöbb műveletek a tapaszt legalább két sor a környezet.”

Kontestnyh Jelölje meg a sorok számát többféleképpen

Ha az összefüggésben hotit formátumban, akkor lehet kombinálni, add „C”, hogy az opciót. például:

] $ Diff -C 2 originaldirectory / updateddirectory /

Az előző parancs használja a helyi formátumban két kontextusban vonalak.

Ha az összefüggésben hotit formátumban, akkor lehet kombinálni, add „U” a lehetőséget. például:

] $ Diff -u 2 originaldirectory / updateddirectory /

Ezután a csapat egy egységes formátumban két kontextusban vonalak.

Ha nem adja meg, milyen formátumban szeretné használni a parancs a következőképpen néz ki:

] $ Diff -2 originaldirectory / updateddirectory /

Ez azonban csak akkor működik, ha a formátum megadásához. Be kell, hogy használja ezt a lehetőséget, vagy „c” vagy „u”.