Rešavanje konflikta

U jednom trenutku dobijate konfl ikt kada ažurirate/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 imenik, koji je drugi programer pomerio/preimenovao/obrisao ili samo izmenio.

Fajl Konflikti

Konflikt se javlja kada dva ili više programera izmene isto nekoliko linija fajla. Kako Subverzija ne zna ništa o vašem projektu, ona ostavlja rešavanje konflikta programerima. Kadgod se konflikt iznese treba da otvorite fajl u pitanju i potražite linije koje počinju stringom <<<<<<<. Konfliktna oblast je markirana kao ovo:

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

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

filename.ext.mine

Ovo je vaš fajl kako je postojao u vašoj radnoj kopiji pre nego ste ažurirali 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 ažurirali 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 ažurirali vašu radnu kopiju. Ovaj fajl odgovara GLAVNOJ reviziji spremišta.

Možete ili lansirati spoljašnji alat za stapanje / konflikt uređivač sa TortoiseSVNUredi Konflikte ili možete koristiti bilo koji uređivač da ručno rešite konflikt. Treba odlučiti kako kod treba da izgleda, uradite neophodne izmene i sačuvajte fajl.

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 imenik i izborom TortoiseSVNRešen... Ovo će prikazati dijalog listing svih konfliktnih fajlova u tom imeniku, i možete izabrati koji da markirate rešenim.

Konflikti Stabla

Konflikt stabla javlja se kadaje programer pomerio/preimenovao/obrisao fajl ili imenik, 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 ažuriranja radna OSNOVA će uvek sadržati reviziju svake stavke kako je to u spremištu u vreme ažuriranja. Ako vratite izmene posle ažuriranja 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 ažuriranja

  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 imenik.

Ažuriranje 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 imenika 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đivanja konflikta omogućava obe opcije ako može da nađe originalan fajl preimenovanog Bar.c. U zavisnosti gde je ažuriranje pozvano ne mora biti moguće da se nađe izvorni fajl.

Lokalno uredi, dolazeće obriši do ažuriranja

  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 imenika ...

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

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

Ažuriranje 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 imenika:

  • BarFolder je dodat u radnu kopiju kao normalan imenik.

  • 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 se stope njene lokalne izmene sa reorganizacijom, Saradnik B mora da nađe u koje ime fajla konfliktni fajl Foo.c je preimenovan/pomeren u spremištu. Ovo može biti urađeno pomoću dijaloga dnevnika. Izmene moraju onda biti stopljene ručno i trenutno nema načina da se to automatizuje ili pojednostavi proces. Kada se jednom izmene provuku konfliktna putanje je suvišna i može biti obrisana. U ovom slučaju koristite Ukloni dugme u dijalogu uređivača konflikta da se obriše konflikt i označi rešenim.

Ako programer B odluči da su A-ove izmene loše onda ona mora izabrati Čuvaj dugme u dijalogu uređivača konflikta. Ovo označava konfliktni fajl/imenik rešenim, ali izmene Programera A treba da budu uklonjene ručno. Ponovo dijalig dnevnika pomaže da se prati šta je pomereno.

Lokalno briši, dolazeće briši do ažuriranja

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

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

Ažuriranje 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.

Postoji ekvivalentan slučaj za imenike, ali to još nije detektovano u Subverziji 1.6 ...

  1. Programer A radeći u deblu pomera predački imenik 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.

Da se stope njene lokalne izmene sa reorganizacijom, Programer B mora da nađe u koje ime fajla konfliktni fajl Foo.c je preimenovan/pomeren u spremištu. Ovo može biti urađeno pomoću dijaloga dnevnika za izvor stapanja. Urednik konflikta samo prikazuje dnevnik za radnu kopiju kako nezna koja putanja je korišćena pri stapanju, tako da vi to morate uraditi sami. Izmene moraju onda biti stopljene ručno i trenutno nema načina da se to automatizuje ili pojednostavi proces. Kada se jednom izmene provuku konfliktna putanje je suvišna i može biti obrisana. U ovom slučaju koristite Ukloni dugme u dijalogu uređivača konflikta da se obriše konflikt i označi rešenim.

Ako programer B odluči da su A-ove izmene loše onda ona mora izabrati Čuvaj dugme u dijalogu uređivača konflikta. Ovo označava konfliktni fajl/imenik rešenim, ali izmene Programera A treba da budu uklonjene ručno. Ponovo dijalog dnevnika za izvor stapanja pomaže da se prati š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 konflikt, Programer B ima da nađe u koje ime fajla konfliktnog fajla Foo.c je preimenovano/pomereno u spremištu. Ovo može biti urađeno koristeći dijalog dnevnika za stopljen izvor. Urednik konflikta samo prikazuje dnevnik za radnu kopiju kako nezna koja putanja je korišćena pri stapanju tako da to nađete sami.

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.