Ristiriitojen ratkonta

Silloin tällöin saat ilmoituksen ristiriidasta päivittäessäsi tai yhdistäessäsi tiedostojasi arkistosta tai vaihtaessasi työkopiosi osoittamaan uuteen paikantimeen. On olemassa kahden tyyppisiä ristiriitoja:

tiedostoristiriidat

Tiedostoristiriita syntyy, kun kaksi (tai useampia) kehittäjää on muuttanut jonkin tiedoston samoja rivejä.

puuristiriidat

Puuristiriita syntyy, kun kehittäjä siirtää/nimeää uudelleen/poistaa tiedoston tai kansion, jonka joku toinen kehittäjä on myös siirtänyt/nimennyt uudelleen/poistanut, tai jota hän on pelkästään muokannut.

Tiedostoristiriidat

Tiedostoristiriita syntyy, kun kaksi tai useampia kehittäjiä on muuttanut samoja rivejä jossain tiedostossa. Koska Subversion ei tiedä mitään projektistasi, se jättää ristiriitojen ratkonnan kehittäjän vastuulle. Ristiriitainen alue merkitään tekstitiedostoissa seuraavasti:

<<<<<<< tiedostonimi
    sinun muutoksesi
=======
    arkistosta yhdistetyt muutokset
>>>>>>> versio

Tämän lisäksi Subversion luo jokaista ristiriitaista tiedostoa kohti kolme ylimääräistä tiedostoa hakemistoosi:

tiedostonimi.mine

Tämä on sinun tiedostosi sellaisena, kun se löytyi työkopiostasi ennen kuin päivitit työkopiosi - siis ilman ristiriitamerkintöjä. Tässä tiedostossa ovat viimeisimmät muutoksesi, eikä muuta.

tiedostonimi.rVANHAVERSIO

Tämä tiedosto oli kantaversio (BASE) ennen kuin päivitit työkopiosi. Toisin sanoen se tiedosto, jonka viimeksi hait ennen kuin aloit muuttaa sitä.

tiedostonimi.rUUSIVERSIO

Tämä on se tiedosto, jonka Subversion-asiakas vastaanotti palvelimelta kun päivitit työkopiosi. Tämä tiedosto vastaa arkiston uusinta (HEAD) versiota.

Voit joko käynnistää ulkoisen yhdistämistyökalun komennolla TortoiseSVNMuokkaa ristiriitoja/guimenuitem> tai voit k.

Suorita lopuksi komento TortoiseSVNRatkaistu ja toimita muutoksesi arkistoon. Huomaa, että Ratkaise-komento ei oikeasti ratkaise ristiriitaa. Se vain poistaa tiedostonimi.mine ja tiedostonimi.r* -tiedostot ja siten sallii myöhemmät toimita-komennot.

Jos sinulla on ristiriitoja binääritiedostojen kanssa, Subversion ei yritä yhdistää tiedostoja itse. Paikallinen tiedosto säilyy muuttumattomana (täsmälleen sellaisena, kuin viimeksi muuttaessasi sitä) ja työkopioosi luodaan tiedostonimi.r* -tiedostot. Jos haluat perua muutoksesi ja pitää arkistoversion, käytä komentoa Palauta. Jos haluat pitää oman versiosi ja ylikirjoittaa arkiston version, käytä komentoa Merkitse ratkaistuksi ja toimita sen jälkeen oma versiosi arkistoon.

Voit käyttää Merkitse ratkaistuksi -komentoa useille tiedostoille, jos valitset yläkansion ja sieltä komennon TortoiseSVNMerkitse ratkaistuksi... Komento näyttää ikkunan, jossa luetellaan kaikki ristiriitaiset tiedostot; voit sitten valita, mitkä niistä merkitään ratkaistuiksi.

Ominaisuusristiriidat

Ominaisuusristiriita syntyy, kun kaksi (tai useampia) kehittäjää on muuttanut samaa ominaisuutta. Kuten tiedostoristiriidan tapauksessa, ristiriidan voi ratkoa vain kehittäjä.

Jos jokin muutoksista korvaa toisen, valitse toinen vaihtoehdoista Ratkaise käyttämällä paikallista ominaisuutta tai Ratkaise käyttämällä etäominaisuutta. Mikäli muutokset on yhdistettävä, valitse Muokkaa ominaisuutta, tee tarvittavat muutokset ja merkitse ristiriita ratkaistuksi.

Puuristiriidat

Puuristiriita syntyy, kun kehittäjä siirtää/nimeää uudelleen/poistaa tiedoston tai kansion, jonka joku toinen kehittäjä on myös siirtänyt/nimennyt uudelleen/poistanut, tai jota hän on pelkästään muokannut. On useita tilanteita, jotka voivat johtaa puuristiriitaan, ja jokainen niistä vaatii erilaisia toimenpiteitä ristiriidan ratkaisemiseksi.

Kun Subversion poistaa tiedoston paikallisesti, se poistetaan myös paikallisesta tiedostojärjestelmästä. Tästä syystä sille ei voida näyttää kuvakepäällystä eikä sitä voida valita komentojen kohteeksi puuristiriitatilanteessa. Käytä sen sijaan Tarkista muutokset -ikkunaa käynnistääksesi Muokkaa ristiriitoja -toiminnon.

TortoiseSVN voi auttaa oikean yhdistämispaikan löytämisessä, mutta ristiriitojen ratkaisemiseen voi liittyä ylimääräistä työtä. Muista, että päivityksen jälkeen työkopion BASE-versio sisältää jokaisen kohteen version sellaisena, kun se oli arkistossa päivityshetkellä. Jos palautat muutoksen päivityksen jälkeen, kohde palautuu arkistoversioon, ei siihen versioon, joka oli käytössä aloittaessasi omia muutoksiasi.

Paikallinen poisto, saapuva muutos päivityksen yhteydessä

  1. Kehittäjä A muokkaa tiedostoa Foo.c ja toimittaa sen arkistoon.

  2. Kehittäjä B on samaan aikaan siirtänyt tiedoston Foo.c tiedostoon Bar.c työkopiossaan, tai yksinkertaisesti poistanut tiedoston Foo.c tai sen sisältävän kansion.

Kehittäjän B työkopion päivitys synnyttää puuristiriidan:

  • Tiedosto Foo.c on poistettu työkopiosta, mutta merkitty puuristiriitaiseksi.

  • Jos ristiriita ei johdu poistosta vaan uudelleen nimeämisestä, tiedosto Bar.c merkitään lisätyksi, mutta ei sisällä kehittäjän A muutoksia.

Kehittäjän B on nyt valittava, haluaako hän säilyttää kehittäjän A muutokset. Jos kyseessä on tiedoston uudelleen nimentä, hän voi yhdistää tiedoston Foo.c muutokset tiedostoon Bar.c. Tiedostojen tai kansioiden poiston yhteydessä hän voi valita, säilyttääkö hän kehittäjän A muutokset ja peruu poistonsa. Merkitsemällä ristiriidan ratkaistuksi tekemättä mitään hän voi toisaalta poistaa kehittäjän A muutokset.

Ristiriitojen muokkausikkuna tarjoutuu yhdistämään muutokset, jos se löytää uudelleen nimetyn tiedoston Bar.c alkuperäisen version. Jos mahdollisia tiedostoja on useita, voit valita oikean tiedoston.

Paikallisia muutoksia, saapuva poisto päivityksen yhteydessä

  1. Kehittäjä A siirtää tiedoston Foo.c tiedostoon Bar.c ja toimittaa muutokset arkistoon.

  2. Kehittäjä B muokkaa tiedostoa Foo.c työkopiossaan.

Tai tapauksessa, jossa kansio siirtyy...

  1. Kehittäjä A siirtää yläkansion FooFolder kansioon BarFolder ja toimittaa muutokset arkistoon.

  2. Kehittäjä B muokkaa tiedostoa Foo.c työkopiossaan.

Kehittäjän B työkopion päivitys synnyttää puuristiriidan. Yksinkertaiselle tiedostoristiriidalle:

  • Tiedosto Bar.c lisätään työkopioon normaalina tiedostona.

  • Tiedosto Foo.c merkitään lisätyksi (historia kera) ja puuristiriitaiseksi.

Kansioristiriidalle:

  • Kansio BarFolder lisätään työkopioon normaalina kansiona.

  • Tiedosto Foo.c merkitään lisätyksi (historian kera) ja puuristiriitaiseksi.

    Tiedosto Foo.c merkitään muutetuksi.

Nyt kehittäjän B on päätettävä, hyväksyäkö kehittäjän A uudelleenjärjestelyt ja yhdistää muutoksensa uuden hierarkian vastaavaan tiedostoon, vai peruako kehittäjän A muutokset ja säilyttää paikallinen tiedosto.

Yhdistääkseen paikalliset muutokset kehittäjän B on ensin selvitettävä, mikä on tiedoston Foo.c uusi nimi/paikka arkistossa. Tämä onnistuu loki-ikkunan avulla, minkä jälkeen hän voi valita oikean tiedoston ristiriidan ratkaisemiseksi.

Jos kehittäjä B päättää, että A:n muutokset ovat pahasta, hänen on valittava ristiriitaeditorin painike Merkitse ratkaistuksi. Tämä merkitsee ristiriitaisen tiedoston/kansion ratkaistuksi, mutta kehittäjän A muutokset on poistettava käsin. Tässäkin tapauksessa loki-ikkunan avulla voi selvittää, mitä muutettiin.

Paikallinen poisto, saapuva poisto päivityksen yhteydessä

  1. Kehittäjä A siirtää tiedoston Foo.c tiedostoon Bar.c ja toimittaa muutokset arkistoon.

  2. Kehittäjä B siirtää tiedoston Foo.c tiedostoon Bix.c.

Kehittäjän B työkopion päivitys synnyttää puuristiriidan:

  • Tiedosto Bix.c merkitään lisätyksi historian kera.

  • Tiedosto Bar.c on lisätty työkopioon tilassa 'normaali'.

  • Tiedosto Foo.c merkitään poistetuksi ja puuristiriitaiseksi.

Ratkaistakseen tämän ristiriidan kehittäjän B on selvitettävä, mikä on tiedoston Foo.c uusi nimi arkistossa. Tämä onnistuu loki-ikkunan avulla.

Kehittäjän B on nyt päätettävä, kumman uuden tiedostonimistä Foo.c hän haluaa säilyttää - kehittäjän A tekemän vai itse tekemänsä uudelleennimennän.

Kun kehittäjä B on käsin ratkaissut puuristiriidan, se on merkittävä ratkaistuksi ristiriitaikkunan painikkeella.

Paikallinen puuttuu, saapuva muokkaus yhdistettäessä

  1. Kehittäjä A muokkaa päähaaran tiedostoa Foo.c ja toimittaa muutokset arkistoon.

  2. Kehittäjä B siirtää kehityshaarassa tiedoston Foo.c tiedostoon Bar.c ja toimittaa muutokset arkistoon

Kehittäjän A päähaaramuutosten yhdistäminen kehittäjän B kehityshaaran työkopioon tuottaa puuristiriidan:

  • Tiedosto Bar.c on jo olemassa työkopiossa tilassa 'normaali'.

  • Tiedosto Foo.c merkitään puuttuvaksi ja puuristiriitaiseksi.

Ratkaistakseen tämän ristiriidan kehittäjän B on merkittävä tiedosto ratkaistuksi ristiriitaikkunassa, jolloin se poistuu ristiriitaluettelosta. Tämän jälkeen hänen on päätettävä, kopioidako puuttuva tiedosto Foo.c arkistosta työkopioon, yhdistääkö kehittäjän A muutokset tiedostosta Foo.c uudelleen nimettyyn tiedostoon Bar.c, vai jättääkö muutokset huomioimatta merkitsemällä ristiriita suoraan ratkaistuksi.

Huomaa, että jos kopioit puuttuvan tiedoston arkistosta ja merkitset sen ratkaistuksi, kopiosi poistetaan jälleen. Sinun on ensin ratkaistava ristiriita.

Paikallinen muokkaus, saapuva poisto yhdistettäessä

  1. Päähaarassa työskentelevä kehittäjä A siirtää tiedoston Foo.c tiedostoon Bar.c ja toimittaa sen arkistoon.

  2. Kehittäjä B muokkaa kehityshaarassa tiedostoa Foo.c ja toimittaa muutokset arkistoon.

  1. Kehittäjä A siirtää päähaaran yläkansion FooFolder kansioon BarFolder ja toimittaa muutokset arkistoon.

  2. Kehittäjä B muokkaa kehityshaaran tiedostoa Foo.c työkopiossaan.

Kehittäjän A päähaaramuutosten yhdistäminen kehittäjän B kehityshaaran työkopioon tuottaa puuristiriidan:

  • Tiedosto Bar.c merkitään lisätyksi.

  • Tiedosto Foo.c merkitään muutetuksi ja puuristiriitaiseksi.

Nyt kehittäjän B on päätettävä, hyväksyäkö kehittäjän A uudelleenjärjestelyt ja yhdistää muutoksensa uuden hierarkian vastaavaan tiedostoon, vai peruako kehittäjän A muutokset ja säilyttää paikallinen tiedosto.

Yhdistääkseen paikalliset muutoksensa uuteen paikkaan, kehittäjän B on ensin selvitettävä, mikä on tiedoston Foo.c uusi nimi ja/tai sijainti arkistossa. Tämän voi selvittää tutkimalla kopiolähteen loki-ikkunaa: ristiriitaeditori kykenee näyttämään lokin vain työkopiolle, koska se ei tiedä yhdistettäessä käytettyä polkua. Muutokset on sitten yhdistettävä käsin. Kun tämä on tehty, ristiriitainen polku on tarpeeton ja voidaan poistaa.

Jos kehittäjä B päättää, että A:n muutokset ovat pahasta, hänen on valittava ristiriitaeditorin painike Merkitse ratkaistuksi. Tämä merkitsee ristiriitaisen tiedoston/kansion ratkaistuksi, mutta kehittäjän A muutokset on poistettava käsin. Tässäkin tapauksessa yhdistämislähteen loki-ikkunan avulla voi selvittää, mitä muutettiin.

Paikallinen poisto, saapuva poisto yhdistettäessä

  1. Päähaarassa työskentelevä kehittäjä A siirtää tiedoston Foo.c tiedostoon Bar.c ja toimittaa sen arkistoon.

  2. Kehittäjä B siirtää kehityshaaran tiedoston Foo.c tiedostoon Bix.c ja toimittaa muutokset arkistoon

Kehittäjän A päähaaramuutosten yhdistäminen kehittäjän B kehityshaaran työkopioon tuottaa puuristiriidan:

  • Tiedosto Bix.c asetetaan tilaan 'normaali' (ei muutoksia).

  • Tiedosto Bar.c merkitään lisätyksi historian kera.

  • Tiedosto Foo.c merkitään puuttuvaksi ja puuristiriitaiseksi.

Ratkaistakseen tämän ristiriidan kehittäjän B on selvitettävä, mikä on tiedoston Foo.c uusi nimi/paikka arkistossa. Tämä onnistuu yhdistämislähteen loki-ikkunan avulla.

Kehittäjän B on nyt päätettävä, kumman uuden tiedostonimistä Foo.c hän haluaa säilyttää - kehittäjän A tekemän vai itse tekemänsä uudelleennimennän.

Kun kehittäjä B on käsin ratkaissut puuristiriidan, se on merkittävä ratkaistuksi ristiriitaikkunan painikkeella.

Muut puuristiriidat

On muita tapauksia, jotka luokitellaan puuristiriidoiksi, koska ristiriitaan liittyy kansio tiedoston sijaan. Jos esimerkiksi lisäät kansion samalla nimellä kahteen eri haaraan ja koetat yhdistää ne, syntyy puuristiriita. Mikäli haluat säilyttää yhdistämiskohteen kansion, riittää kun merkitset ristiriidan ratkaistuksi. Jos haluat käyttää yhdistämislähteen versiota, sinun on poistettava yhdistämiskohteen versio ja suoritettava yhdistäminen uudelleen. Mikäli tarvitaan monimutkaisempia toimenpiteitä, on ne ratkottava erikseen käsin.