Rešavanje konflikta

U jednom trenutku dobijate konfl ikt kada uskladite/stopite vaše fajlove iz spremišta ili kada prebacite vašu radnu kopiju na različit URL. Postoje dve vrste konflikata :

fajl konflikti

Fajl konflikt se javlja ako su dva (ili više) programera izmenila istih nekoliko linija fajla.

konflikti stabla

Konflikt stabla javlja se kadaje programer pomerio/preimenovao/obrisao fajl ili folder, koji je drugi programer pomerio/preimenovao/obrisao ili samo izmenio.

Fajl Konflikti

Fajl konflikt se javlja kada dva ili više programera izmene istih nekoliko linija fajla. Kako Subverzija nezna ništa o vašem projektu ostavlja da konflikt razreše programeri. Konfliktna površina u tekstualnom fajlu označena je kao:

<<<<<<< filename
your changes
=======
code merged from repository
>>>>>>> revision
      

Takođe, za svaki konfliktni fajl Subverzija stavlja tri dodatna fajla u vaš direktorijum:

filename.ext.mine

Ovo je vaš fajl kako je postojao u vašoj radnoj kopiji pre nego ste uskladili vašu radnu kopiju - to je, bez konfliktnih markera. Ovaj fajl ima vaše poslednje izmene u njemu i ništa više.

filename.ext.rOLDREV

Ovo je fajl koji je bio u OSNOVNOJ reviziji pre nego ste uskladili radnu kopiju. Dakle, taj fajl koji ste preuzeli pre nego ste uradili vaše zadnje uređenje.

filename.ext.rNEWREV

ovo je fajl koji je vaš Subverzioni klijent upravo primio sa servera kada ste uskladili vašu radnu kopiju. Ovaj fajl odgovara GLAVNOJ reviziji spremišta.

Možete lansirati spoljašnji alat za stapanje / konflikt uređivač pomoću TortoiseSVNUredi konflikte ili možete koristiti bilo koji uređivač teksta da rešite konflikte ručno. Treba da odlučite na šta kod treba da liči, uradite neophodne izmene i sačuvate fajl. Koristeći alat stapanja kao što je TortoiseMerge ili neki od popularnih alata je lakša opcija koji uopšte prezentuju fajl u 3-panel izgledu i ne brinite o konfliktnim markerima. Ako koristite tekst uređivač morate tražiti linije koje počinju sa <<<<<<<.

Posle izvršenja komande TortoiseSVNRešen i urežite vaše izmene u spremište. Molim primetite da komanda Reši ne rešava stvarno konflikte. Ona samo uklanja filename.ext.mine i filename.ext.r* fajlovi, da vam omogući da urežete vaše izmene.

Ako imate konflikt sa binarnim fajlovima, Subverzija ne pokušava da stopi same fajlove. Lokalni fajl ostaje neizmenjen (tačno kao što ste ga izmenili) i vi imate filename.ext.r* fajlove. Ako želite da odbacite svoje izmene i zadržite verziju iz spremišta, samo iskoristite komandu Vrati. Ako želite da zadržite vašu verziju i da prepišete verziju spremišta, koristite komandu Reši, i urežite svoju verziju.

Možete koristiti komandu Rešen za više fajlova sa desnim klikom na predački folder i izborom TortoiseSVNRešen... Ovo će prikazati dijalog listing svih konfliktnih fajlova u tom folderu, i možete izabrati koji da markirate rešenim.

Konflikti osobina

Konflikt osobina se javlja kada dva ili više programera izmene iste osobine. Isto kao sa sadržajem fajla, rešavanje konflikta mogu izvršiti samo programeri.

Ako jedna od izmena mora da pokrije drugu tada izaberite opciju Reši koristeći lokalne osobine ili Reši koristeći daljinske osobine. Ako izmene moraju da budu stopljene izaberite Ručno uređenje osobina, sortirajte potrebne vrednosti osobina i markirajte ih kao rešene.

Konflikti Stabla

Konflikt stabla javlja se kadaje programer pomerio/preimenovao/obrisao fajl ili folder, koji je drugi programer pomerio/preimenovao/obrisao ili samo izmenio. Postoji mnogo različitih situacija koje mogu prouzrokovati konflikt stabla, i svi oni zahtevaju različite stepene rešavanja konflikta.

Kada je fajl obrisan lokalno u Subverziji, fajl je takođe obrisan iz lokalnog fajl sistema , tako da čak i ako je on deo konfliktnog stabla on ne može pokazati konfliktne prekrivače i ne možete desno kliknuti na njega da rešite konflikt. Koristite Proveri Izmene dijalog da pristupite Uredi konflikte opcijama.

TortoiseSVN vam može pomoći da pronađete ispravno mesto da stopite izmene, ali može biti potreban dodatan rad da se sortiraju konflikti. Zapamtite to da posle obnavljanja radna OSNOVA će uvek sadržati reviziju svake stavke kako je to u spremištu u vreme obnavljanja. Ako vratite izmene posle obnavljanja vraćate se na stanje spremišta, ne na trenutak kada ste počeli da radite svoje lokalne izmene.

Lokalno briši, dolazeće uredi do obnavljanja

  1. Programer A menja Foo.c i urezuje ga u spremište.

  2. Programer B je istovremeno pomerio Foo.cu Bar.c u svojoj radnoj kopiji, ili jednostavno obrisao Foo.c ili njegov predački folder.

Obnavljanje radne kopije programera B daje konflikt stabla:

  • Foo.c je obrisano iz radne , ali je označeno sa konfliktom stabla.opije.

  • Ako je konflikt od preimenovanja pre nego od brisanja tada je Bar.c označen kao dodat, ali ne sadrži izmene programera A.

Programer B sada ima da izabere da li da zadrži izmene Programera A. U slučaju preimenovanja fajla on može da stopi izmene u Foo.c u preimenovanom fajlu Bar.c. Za jednostavno brisanje fajla ili foldera mora da izabere da čuva stavku sa izmenama Programer A i odbaci brisanje. Ili, označavajući konflikt rešenim bez ikakvog angažovanja odbacuje izmene Programera A.

Dijalog uređenja konflikta omogućava da se stope izmene ako može da se nađe originalni fajl preimenovanog Bar.c. Ako ima multipl fajlova koji možda pomeraju izvorne onda dugmad za svaki od tih fajlova prikazuju koji vam dozvoljava da izaberete korektan fajl.

Lokalno uredi, dolazeće obriši do obnavljanja

  1. Programer A pomera Foo.c u Bar.c i urezuje ga u spremište.

  2. Programer B menja Foo.c u svojoj radnoj kopiji.

Ili u slučaju pomeranja foldera ...

  1. Programer A pomera predački folder FooFolder u BarFolder i urezuje ga u spremište.

  2. Programer B menja Foo.c u svojoj radnoj kopiji.

Obnova radne kopije programera B daje konflikt stabla. Za jednostavni fajl konflikt:

  • Bar.c je dodat u radnu kopiju kao normala fajl.

  • Foo.c je označen kao izmenjen (sa istorijom) i ima konfliktno stablo..

Za konflikt foldera:

  • BarFolder je dodat u radnu kopiju kao normalan folder.

  • FooFolder je označen kao dodat (sa istorijom) i ima konflikt stabla.

    Foo.c je označen kao izmenjen.

Programer B sada odluči da li da ide sa reorganizaciojom programera A i stopi njegove izmene u odgovarajući fajl u novoj strukturi, ili jednostavno vrati A-ove izmene i sačuva lokalni fajl.

Da sestope njene lokalne izmene sa mešanjem, izrađivač B mora najpre da nađe ime konfliktnog fajla Foo.c je preimenovan/pomeren u spremište. Ovo može biti dato korišćenjem dijaloga dnevnika. Onda koristite dugme koje prikazuje korektan izvorni fajl da rešite konflikt.

Ako programer B odluči da su A izmene bile loše ona mora da izabere Markiraj kao rešeno dugme u dijalogu uređivača konflikta. Ovo markira konfliktni fajl/folder kao rešen, ali A programerske izmene treba da budu uklonjene ručno. Ponovo će dijalog dnevnika pomoći da se nađe šta će se ukloniti.

Lokalno briši, dolazeće briši do obnavljanja

  1. Programer A pomera Foo.c u Bar.c i urezuje ga u spremište.

  2. Programer B pomera Foo.c u Bix.c.

Obnavljanje radne kopije programera B daje konflikt stabla:

  • Bix.c je označen kao dodat sa istorijom.

  • Bar.c je dodat u radnu kopiju sa statusom 'normalan'.

  • Foo.c je označen kao obrisan i ima konflikt stabla.

Da se reši konflikt, Programer B ima da nađe ime fajla konfliktnog fajla Foo.c je preimenovano/pomereno u spremištu. Ovo može biti urađeno koristeći dijalog dnevnika.

Zatim programer B ima da odluči koje novo ime fajla Foo.c da čuva - ono dato od saradnika A ili preimenovanje koje je sam uradio.

Posle ručnog rešenja konflikta programer B, konflikt stabla je označen kao rešen dugmetom u dijalogu konflikt urednika.

Lokalno nedostaje, dolazeće urediti do stapanja

  1. Programer A radeći na deblu menja Foo.c i urezuje ga u spremište.

  2. Programer B radeći na grani pomera Foo.c u Bar.c i urezuje ga u spremište.

Stapanje izmena debla programer A u radnu kopiju grane saradnika B daje konflikt stabla:

  • Bar.c je već dodat u radnu kopiju sa statusom 'normalan'.

  • Foo.c je označeno kao nedostajuće sa konfliktom stabla.

Da se reši konflikt, Programer B ima da označi fajl kao rešen u dijalogu konflikt urednika, što će ga ukloniti iz konfliktne liste. Ona zatim ima da odluči da li da kopira nedostajući fajl Foo.c iz spremišta i doda ga u radnu kopiju, da li da stopi izmene Programera A u Foo.c u preimenovan Bar.c ili da zanemari izmene označavajući konflikt rešenim i da ne radi više ništa.

Primetimo da ako kopirate nedostajući fajl iz spremišta i zatim ga označite rešenim, vaša kopija će ga ponovo ukloniti. Morate najpre rešiti konflikt.

Lokalno uredi, dolazeće obriši do stapanja

  1. Programer A radeći na deblu pomera Foo.c u Bar.c i urezuje ga u spremište.

  2. Programer B radeći na grani menja Foo.c i urezuje ga u spremište.

  1. Programer A radeći u deblu pomera predački folder FooFolder u BarFolder i urezuje ga u spremište.

  2. Programer B radeći u grani menja Foo.c u svojoj radnoj kopiji.

Stapanje izmena debla programer A u radnu kopiju grane saradnika B daje konflikt stabla:

  • Bar.c je označen kao dodat.

  • Foo.c je označen kao izmenjen sa konfliktom stabla.

Programer B sada odluči da li da ide sa reorganizaciojom programera A i stopi njegove izmene u odgovarajući fajl u novoj strukturi, ili jednostavno vrati A-ove izmene i sačuva lokalni fajl.

Stapanje njnih lokalnih izmena sa reorganizovanjem programer B mora najpre da nađe ime fajla u konfliktu Foo.c je preimenovano/pomereno u spremištu. Ovo može biti urađeno korišćenjem dijaloga dnevnoka za stopljeni izvor. Uređivač konflikta prikazuje samo dnevnik za radnu kopiju i ne zna koja je putanja korišćena pri stapanju, tako da to morate naći sami. Izmene onda moraju biti stopljene ručno jer sada nema načina da se to automatizuje ili samo uprosti proces. Ako se izmene prenesu konfliktna putanja je redundantna i može se obrisati.

Ako programer B odluči da su A izmene bile loše ona mora da izabere Markiraj kao rešen dugme u dijalogu uređivanja konflikta. Ovo markira konfliktni fajl/folder kao rešen, ali izmene programera A treba da budu uklonjene ručno. Ponovo će dijalog dnevnika za stopljeni izvor pomoći da se nađe šta je pomereno.

Lokalno briši, dolazeće briši do stapanja

  1. Programer A radeći na deblu pomera Foo.c u Bar.c i urezuje ga u spremište.

  2. Programer A radeći na grani pomera Foo.c u Bar.c i urezuje ga u spremište.

Stapanje izmena debla programer A u radnu kopiju grane saradnika B daje konflikt stabla:

  • Foo.c je označen sa normalnim (neizmenjenim) statusom.

  • Bar.c je označen kao dodat sa istorijom.

  • Foo.c je označeno kao nedostajući sa konfliktom stabla.

Da se reši ovaj konflikt progamer B ima da nađe ime konfliktnog fajla Foo.c koje je preimenovano/pomereno u spremištu. Ovo će biti dato korišćenjem dijaloga dnevnika za stopljeni izvor.

Zatim programer B ima da odluči koje novo ime fajla Foo.c da čuva - ono dato od saradnika A ili preimenovanje koje je sam uradio.

Posle ručnog rešenja konflikta programer B, konflikt stabla je označen kao rešen dugmetom u dijalogu konflikt urednika.

Drugi konflikti stabla

Postoje drugi slučajevi koji su jednostavno označeni kao konflikt stabla zato što konflikt radije obuhvata folder nego fajl. Na primer, ako dodate folder istog imena i u deblo i u granu ionda pokušate da stopite dobićete konflikt stabla. Ako želite da zadržite folder iz cilja stapanja, samo označite konflikt rešenim. Ako želite da koristite jedan od izvora stapanja potrebno vam je da SVN obriše jedan od ciljeva pre nego uradi ponovno stapanje. Ako želite nešto komplikovanije treba to rešiti ručno.