Naredba spajanja provodi trosmjerno spajanje datoteka na operativnim sistemima koji liče na Unix.
Proces spajanja tri datoteke ispituje osnovnu verziju, dvije konfliktne ažurirane verzije.
Na osnovu zajedničke osnovne verzije, pokušava automatski integrirati oba skupa izmjena u jednu datoteku.
Olakšava ručno spajanje ako automatsko spajanje nije opcija.
Ovaj članak objašnjava GNU/Linux implementaciju spajanja.
Opis
Merge je komponenta RCS sistema kontrole verzija.
Koristi se za kombinovanje tri datoteke zajedno.
Merge analizira tri fajla, original i dve izmenjene kopije originala, red po red, nastojeći da pomiri sukobe između dva skupa modifikacija kako bi se generisao jedinstveni fajl koji predstavlja oba skupa promjena.
Ovisno o tome kako se dva skupa izmjena razlikuju, može biti potrebna ili automatska procedura ili korisnički unos.
Merge obično zna šta treba da uradi sam ako nijedan skup modifikacija nije u sukobu sa drugim.
Međutim, spajanje naglašava problem u konačnoj spojenoj datoteci ako su dva skupa izmjena nekompatibilna, na primjer kada je isti red teksta drugačije formuliran u oba ažurirana fajla.
Kako funkcionira spajanje
Sve modifikacije od file2 do file3 su uključene u file1 kroz spajanje.
Rezultat često ide u file1.
Recimo da je fajl2 original, dok su fajlovi 1 i 3 oba izmjene fajla2.
Zatim spajanje spaja dvije modifikacije.
<<<<<<< file A
lines in file A
=======
lines in file B
>>>>>>> file B
Korisnik bi trebao ažurirati rezultat i eliminirati jednu od mogućnosti ako ima problema.
Sintaksa
merge [options] file1 file2 file3
Opcije
| -A | Izlazni sukobi koristeći -A stil diff3(1) (ako ga podržava diff3). Ovo kombinuje sve promjene od file2 do file3 u file1 i proizvodi najopširniji izlaz. |
| -E, -e | Ove opcije definiraju stilove sukoba koji daju manje podataka od -A. Za dodatne informacije, pogledajte diff3(1). Zadana vrijednost je -E. Spajanje ne obavještava o sukobima kada se koristi -e. |
| -L label | Ova opcija se može odabrati do tri puta i određuje oznake koje će se koristiti u izvještajima o sukobu umjesto pridruženih naziva datoteka. To jest, merge -L x -L y -L z a b c proizvodi izlaz koji izgleda da je iz datoteka x, y, i z, a ne iz datoteka a, b i c. |
| -p | Umjesto prepisivanja file1, pošaljite rezultate na standardni izlaz. |
| -q | Tihi način rada. Nemojte izdavati upozorenja o sukobu. |
| -V | Odštampajte broj RCS verzije. |
Primjeri
Pretpostavimo da imamo datoteku pod nazivom orig.txt koja ima sljedeće informacije.
Trešnje su zaista crvene.
Šljive su zelene.
Narandže su narandžaste.
…kao i fajl pod nazivom mod1.txt, koji je modificirana verzija orig.txt:
Trešnje su zaista crvene.
Šljive su žute.
Narandže su narandžaste.
…kao i fajl pod nazivom mod2.txt, koji je takođe modifikovana verzija orig.txt:
Trešnje su zaista crvene.
Šljive nisu zelene.
Narandže su narandžaste.
onda pokrećemo merge:
merge mod1.txt orig.txt mod2.txt
Ispituje sve tri datoteke, upisuje mod1.txt i prikazuje upozorenje:
merge: warning: conflicts during merge
Ovo ukazuje da je spajanje bilo efikasno, ali trebamo imati na umu sukob.
Kada otvorimo mod1.txt, što je datoteka u kojoj je standardno upisano spajanje, vidimo sljedeći tekst:
<<<<<<< mod1.txt
Trešnje su zaista crvene.
Šljive su žute.
=======
Trešnje su zaista crvene.
Šljive nisu zelene.
>>>>>>> mod2.txt
Narandže su narandžaste.
Na nama je da odredimo koje od Šljive… linije da ih sačuvamo ili kombiniramo na svoj način, i ručno ažuriramo datoteku.
diff – Odredite razlike između dva fajla.
