SLN-file_toolbox_Bitwise_blog

TL;DR

Tools for SLN file helpottaa Visual Studion solution-tiedostojen mergeämistä. git_config_slntools säätää gitin asetukset niin, että sitä voi käyttää git difftool– ja git mergetool -komentojen kanssa.

Itse asia

Oletko sinäkin kyllästynyt ratkaisutiedostojen yhdistämiseen (merging solution files)? Pomppivatko projektien kansiohierarkiaan liittyvät rivit ympäri tiedostoa, samaten koontiversiomääritykset (build configurations), ja onko perinteisellä yhdistämistyökalulla käytännössä mahdotonta selvittää, mitä tiedostolle on oikeastaan tapahtunut? Tuloksena on vain vahinkoa koontiversiomäärityksille tai projekteja, jotka pomppivat takaisin vanhaan ratkaisukansioonsa tai ratkaisun päätasolle.

Ei hätää! Tools for SLN file tarjoaa ratkaisutiedostojen yhdistämistyökalun, joka oikeasti ymmärtää ratkaisutiedostojen rakenteen. Siksi se osaa ratkaista yhdistämisen ristiriidat helpommin: jos yhdessä haarassa on nimetty projekti A nimelle B ja samalla uudelleenjärjestelty ratkaisutiedoston rivien järjestyksiä ja toisessa haarassa on siirretty projekti C kansiosta F kansioon G, Tools for SLN file ymmärtää, että nämä voidaan yhdistää siirtämällä projekti A nimelle B ja projekti C kansioon G säilyttäen nykyisen paikallisen haaran rivijärjestys suurimmalta osin.

Tools_for_SLN_file_solution_merge

Ruutukaappaus yhdistämistoiminnon ulkoasusta.

Saat mukaan tästä tarjouksesta skriptin, joka lisää gitin asetuksiin yhdistystyökalun slntools, jonka avulla Tools for SLN filen yhdistysominaisuutta voi helpommin käyttää. Skripti ottaa parametrinaan polun (sisältäen tiedostonimen) SLNTools.exe-ohjelmaan; jos sitä kutsuu ilman parametria, se yrittää arvata ohjelman sijainnin itse. Kun olet ajanut skriptin ja saat ristiriidan jonkin ratkaisutiedoston yhdistämisestä, voit yrittää ratkaista ristiriidan seuraavalla komennolla:

git mergetool -t slntools solution.sln

Eikä tässä vielä kaikki! Jos tilaat heti, saat mukaan myös ratkaisutiedostojen diffaustyökalun. Git-asetukset sille säädetään samalla, kun ne säädetään yhdistystyökalulle. Esimerkiksi kahden commitin alku ja loppu välillä tapahtuneet muutokset voi selvittää sillä seuraavasti:

git difftool -t slntools alku loppu -- solution.sln

Pieni präntti

Tarjoukseen kuuluva skripti olettaa git-komennon löytyvän komentotulkin hakupolusta.

SLNTools on aika nirso sen suhteen, millaisia ratkaisutiedostoja se suostuu lukemaan. Havaittuja ongelmia, joihin se tukehtuu, ovat ainakin:

  • olematon projekti listattu NestedProjects-osassa, joka kuvaa ratkaisun kansiohierarkiaa
  • samalle koontiversiomääritykselle listattu jokin asetus useampaan kertaan

Jos jokin ongelmatilanne tulee, SLNTools kuitenkin turvallisesti antaa vain virheilmoituksen ja kieltäytyy avaamasta tiedostoja. Sitten yhdistämisen joutuu tekemään jollakin muulla työkalulla, esim. KDiff3:lla. En ole kuitenkaan havainnut, että SLNTools olisi mitenkään sotkenut ratkaisutiedostoa; sen sijaan on varsin todennäköistä, että jollakin perusyhdistämistyökalulla sotkee ratkaisutiedoston.

En ole vielä kertaakaan joutunut ratkaisemaan jotakin loogisella tasolla olevaa ristiriitaa SLNToolsin avulla. Loogisella tasolla muutokset ovat aina olleet niin selvästi erillisiä, että SLNTools on osannut yhdistää ne itse, vaikka rivitasolla git onkin havainnut ristiriidan. Siksi minulla ei ole kokemusta SLNToolsin ristiriitojen ratkaisutoiminnosta, mutta se näyttää toimivalta.

Diffaustyökalua en ole vielä kertaakaan käyttänyt oikeaan käyttöön, joten siitä minulla ei ole juuri kokemusta.