Решавање конфликта

У једном тренутку добијате конфл икт када ускладите/стопите ваше фајлове из спремишта или када пребаците вашу радну копију на различит УРЛ. Постоје две врсте конфликата :

фајл конфликти

Фајл конфликт се јавља ако су два (или више) програмера изменила истих неколико линија фајла.

конфликти стабла

Конфликт стабла јавља се кадаје програмер померио/преименовао/обрисао фајл или фолдер, који је други програмер померио/преименовао/обрисао или само изменио.

Фајл Конфликти

Фајл конфликт се јавља када два или више програмера измене истих неколико линија фајла. Како Субверзија незна ништа о вашем пројекту оставља да конфликт разреше програмери. Конфликтна површина у текстуалном фајлу означена је као:

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

Такође, за сваки конфликтни фајл Субверзија ставља три додатна фајла у ваш директоријум:

filename.ext.mine

Ово је ваш фајл како је постојао у вашој радној копији пре него сте ускладили вашу радну копију - то је, без конфликтних маркера. Овај фајл има ваше последње измене у њему и ништа више.

filename.ext.rOLDREV

Ово је фајл који је био у ОСНОВНОЈ ревизији пре него сте ускладили радну копију. Дакле, тај фајл који сте преузели пре него сте урадили ваше задње уређење.

filename.ext.rNEWREV

ово је фајл који је ваш Субверзиони клијент управо примио са сервера када сте ускладили вашу радну копију. Овај фајл одговара ГЛАВНОЈ ревизији спремишта.

Можете лансирати спољашњи алат за стапање / конфликт уређивач помоћу ТортоисеСВНУреди конфликте или можете користити било који уређивач текста да решите конфликте ручно. Треба да одлучите на шта код треба да личи, урадите неопходне измене и сачувате фајл. Користећи алат стапања као што је ТортоисеМерге или неки од популарних алата је лакша опција који уопште презентују фајл у 3-панел изгледу и не брините о конфликтним маркерима. Ако користите текст уређивач морате тражити линије које почињу са <<<<<<<.

После извршења команде ТортоисеСВНРешен и урежите ваше измене у спремиште. Молим приметите да команда Реши не решава стварно конфликте. Она само уклања filename.ext.mine и filename.ext.r* фајлови, да вам омогући да урежете ваше измене.

Ако имате конфликт са бинарним фајловима, Субверзија не покушава да стопи саме фајлове. Локални фајл остаје неизмењен (тачно као што сте га изменили) и ви имате filename.ext.r* фајлове. Ако желите да одбаците своје измене и задржите верзију из спремишта, само искористите команду Врати. Ако желите да задржите вашу верзију и да препишете верзију спремишта, користите команду Реши, и урежите своју верзију.

Можете користити команду Решен за више фајлова са десним кликом на предачки фолдер и избором ТортоисеСВНРешен... Ово ће приказати дијалог листинг свих конфликтних фајлова у том фолдеру, и можете изабрати који да маркирате решеним.

Конфликти особина

Конфликт особина се јавља када два или више програмера измене исте особине. Исто као са садржајем фајла, решавање конфликта могу извршити само програмери.

Ако једна од измена мора да покрије другу тада изаберите опцију Реши користећи локалне особине или Реши користећи даљинске особине. Ако измене морају да буду стопљене изаберите Ручно уређење особина, сортирајте потребне вредности особина и маркирајте их као решене.

Конфликти Стабла

Конфликт стабла јавља се кадаје програмер померио/преименовао/обрисао фајл или фолдер, који је други програмер померио/преименовао/обрисао или само изменио. Постоји много различитих ситуација које могу проузроковати конфликт стабла, и сви они захтевају различите степене решавања конфликта.

Када је фајл обрисан локално у Субверзији, фајл је такође обрисан из локалног фајл система , тако да чак и ако је он део конфликтног стабла он не може показати конфликтне прекриваче и не можете десно кликнути на њега да решите конфликт. Користите Провери Измене дијалог да приступите Уреди конфликте опцијама.

ТортоисеСВН вам може помоћи да пронађете исправно место да стопите измене, али може бити потребан додатан рад да се сортирају конфликти. Запамтите то да после обнављања радна ОСНОВА ће увек садржати ревизију сваке ставке како је то у спремишту у време обнављања. Ако вратите измене после обнављања враћате се на стање спремишта, не на тренутак када сте почели да радите своје локалне измене.

Локално бриши, долазеће уреди до обнављања

  1. Програмер А мења Foo.c и урезује га у спремиште.

  2. Програмер Б је истовремено померио Foo.cу Bar.c у својој радној копији, или једноставно обрисао Foo.c или његов предачки фолдер.

Обнављање радне копије програмера Б даје конфликт стабла:

  • Foo.c је обрисано из радне , али је означено са конфликтом стабла.опије.

  • Ако је конфликт од преименовања пре него од брисања тада је Bar.c означен као додат, али не садржи измене програмера А.

Програмер Б сада има да изабере да ли да задржи измене Програмера А. У случају преименовања фајла он може да стопи измене у Foo.c у преименованом фајлу Bar.c. За једноставно брисање фајла или фолдера мора да изабере да чува ставку са изменама Програмер А и одбаци брисање. Или, означавајући конфликт решеним без икаквог ангажовања одбацује измене Програмера А.

Дијалог уређења конфликта омогућава да се стопе измене ако може да се нађе оригинални фајл преименованог Bar.c. Ако има мултипл фајлова који можда померају изворне онда дугмад за сваки од тих фајлова приказују који вам дозвољава да изаберете коректан фајл.

Локално уреди, долазеће обриши до обнављања

  1. Програмер А помера Foo.c у Bar.c и урезује га у спремиште.

  2. Програмер Б мења Foo.c у својој радној копији.

Или у случају померања фолдера ...

  1. Програмер А помера предачки фолдер FooFolder у BarFolder и урезује га у спремиште.

  2. Програмер Б мења Foo.c у својој радној копији.

Обнова радне копије програмера Б даје конфликт стабла. За једноставни фајл конфликт:

  • Bar.c је додат у радну копију као нормала фајл.

  • Foo.c је означен као измењен (са историјом) и има конфликтно стабло..

За конфликт фолдера:

  • BarFolder је додат у радну копију као нормалан фолдер.

  • FooFolder је означен као додат (са историјом) и има конфликт стабла.

    Foo.c је означен као измењен.

Програмер Б сада одлучи да ли да иде са реорганизациојом програмера А и стопи његове измене у одговарајући фајл у новој структури, или једноставно врати А-ове измене и сачува локални фајл.

Да сестопе њене локалне измене са мешањем, израђивач Б мора најпре да нађе име конфликтног фајла Foo.c је преименован/померен у спремиште. Ово може бити дато коришћењем дијалога дневника. Онда користите дугме које приказује коректан изворни фајл да решите конфликт.

Ако програмер Б одлучи да су А измене биле лоше она мора да изабере Маркирај као решено дугме у дијалогу уређивача конфликта. Ово маркира конфликтни фајл/фолдер као решен, али А програмерске измене треба да буду уклоњене ручно. Поново ће дијалог дневника помоћи да се нађе шта ће се уклонити.

Локално бриши, долазеће бриши до обнављања

  1. Програмер А помера Foo.c у Bar.c и урезује га у спремиште.

  2. Програмер Б помера Foo.c у Bix.c.

Обнављање радне копије програмера Б даје конфликт стабла:

  • Bix.c је означен као додат са историјом.

  • Bar.c је додат у радну копију са статусом 'нормалан'.

  • Foo.c је означен као обрисан и има конфликт стабла.

Да се реши конфликт, Програмер Б има да нађе име фајла конфликтног фајла Foo.c је преименовано/померено у спремишту. Ово може бити урађено користећи дијалог дневника.

Затим програмер Б има да одлучи које ново име фајла Foo.c да чува - оно дато од сарадника А или преименовање које је сам урадио.

После ручног решења конфликта програмер Б, конфликт стабла је означен као решен дугметом у дијалогу конфликт уредника.

Локално недостаје, долазеће уредити до стапања

  1. Програмер А радећи на деблу мења Foo.c и урезује га у спремиште.

  2. Програмер Б радећи на грани помера Foo.c у Bar.c и урезује га у спремиште.

Стапање измена дебла програмер А у радну копију гране сарадника Б даје конфликт стабла:

  • Bar.c је већ додат у радну копију са статусом 'нормалан'.

  • Foo.c је означено као недостајуће са конфликтом стабла.

Да се реши конфликт, Програмер Б има да означи фајл као решен у дијалогу конфликт уредника, што ће га уклонити из конфликтне листе. Она затим има да одлучи да ли да копира недостајући фајл Foo.c из спремишта и дода га у радну копију, да ли да стопи измене Програмера А у Foo.c у преименован Bar.c или да занемари измене означавајући конфликт решеним и да не ради више ништа.

Приметимо да ако копирате недостајући фајл из спремишта и затим га означите решеним, ваша копија ће га поново уклонити. Морате најпре решити конфликт.

Локално уреди, долазеће обриши до стапања

  1. Програмер А радећи на деблу помера Foo.c у Bar.c и урезује га у спремиште.

  2. Програмер Б радећи на грани мења Foo.c и урезује га у спремиште.

  1. Програмер А радећи у деблу помера предачки фолдер FooFolder у BarFolder и урезује га у спремиште.

  2. Програмер Б радећи у грани мења Foo.c у својој радној копији.

Стапање измена дебла програмер А у радну копију гране сарадника Б даје конфликт стабла:

  • Bar.c је означен као додат.

  • Foo.c је означен као измењен са конфликтом стабла.

Програмер Б сада одлучи да ли да иде са реорганизациојом програмера А и стопи његове измене у одговарајући фајл у новој структури, или једноставно врати А-ове измене и сачува локални фајл.

Стапање њних локалних измена са реорганизовањем програмер Б мора најпре да нађе име фајла у конфликту Foo.c је преименовано/померено у спремишту. Ово може бити урађено коришћењем дијалога дневнока за стопљени извор. Уређивач конфликта приказује само дневник за радну копију и не зна која је путања коришћена при стапању, тако да то морате наћи сами. Измене онда морају бити стопљене ручно јер сада нема начина да се то аутоматизује или само упрости процес. Ако се измене пренесу конфликтна путања је редундантна и може се обрисати.

Ако програмер Б одлучи да су А измене биле лоше она мора да изабере Маркирај као решен дугме у дијалогу уређивања конфликта. Ово маркира конфликтни фајл/фолдер као решен, али измене програмера А треба да буду уклоњене ручно. Поново ће дијалог дневника за стопљени извор помоћи да се нађе шта је померено.

Локално бриши, долазеће бриши до стапања

  1. Програмер А радећи на деблу помера Foo.c у Bar.c и урезује га у спремиште.

  2. Програмер А радећи на грани помера Foo.c у Bar.c и урезује га у спремиште.

Стапање измена дебла програмер А у радну копију гране сарадника Б даје конфликт стабла:

  • Foo.c је означен са нормалним (неизмењеним) статусом.

  • Bar.c је означен као додат са историјом.

  • Foo.c је означено као недостајући са конфликтом стабла.

Да се реши овај конфликт прогамер Б има да нађе име конфликтног фајла Foo.c које је преименовано/померено у спремишту. Ово ће бити дато коришћењем дијалога дневника за стопљени извор.

Затим програмер Б има да одлучи које ново име фајла Foo.c да чува - оно дато од сарадника А или преименовање које је сам урадио.

После ручног решења конфликта програмер Б, конфликт стабла је означен као решен дугметом у дијалогу конфликт уредника.

Други конфликти стабла

Постоје други случајеви који су једноставно означени као конфликт стабла зато што конфликт радије обухвата фолдер него фајл. На пример, ако додате фолдер истог имена и у дебло и у грану ионда покушате да стопите добићете конфликт стабла. Ако желите да задржите фолдер из циља стапања, само означите конфликт решеним. Ако желите да користите један од извора стапања потребно вам је да СВН обрише један од циљева пре него уради поновно стапање. Ако желите нешто компликованије треба то решити ручно.