offtopic:
O.o Opera en Kate!
Ik zie zelf eigenlijk maar vrij weinig voordelen van de distributed aanpak, vooral het mergen lijkt me ontiegelijk iritant als je alle veranderingen mee wilt nemen.
User A werkt in repository van User B en voegt aan File C regels D toe.
User E werkt ook in de repository van User B en voegt aan File C regels F toe. (tot zover nog redelijk te mergen
Nu voegt User G in de repository van User A aan File C regels H toe.
En voegt User I in de repository van User E aan File C regels J toe.l
Hoe zorg je er nu voor dat je als User X, de meest recente versie hebt van File C met zowel de wijzigingen van A, E, G en I.
-G, I en B moeten onlin zijn. (in dit geval mogelijk maar in systemen met 25+ man waar iedereen telkens wisselt van het gebruik van andermans repo moeten haast wel iedereen online zijn om echt alle veranderingen te krijgen)
-Stel G heeft een bug gefixed en een extra methode toegevoegd in de gepulde repro van A, en de code die I toegevoegd heeft aan E's repro staat daardoor op de verkeerde plek (bug fix in andere methode). GIT+ moet dan taal-aware zijn of zoeken naar bit patronen om uit-tevogelen hoe een merge tussen G, I, B eruit gaat zijn, maar wie zegt er niet dat dat bitpatroon er toevallig is (als het te kort is kan dit snel) en dat de eigenlijk code waarna de wijzingen van I moeten komen verwijdered is?
-Ook bij stukken die 2x bewerkt zijn lijkt me dit helemaal een hel, omdat het in dit geval niet 1 of 2x is zoals meestal bij een centrale repro, of niet bij een checkout repro, kan dit door de vele branches en verschillende repro's echt ontzettend de hand uitloop.
Nu de problemen bij een centrale repro:
A haalt iets uit repro 1, werkt er mee en commit.
B haalt dezelfde file uit repro 1 en commit.
C haalt ook die file uit repro 1 voordat B commit en commit deze later.
Nu heb je maar 1 probleem en het blijft allemaal een stuk overzichtelijker, hoewel je natuurlijk nogsteeds problmene kan hebben met mergen.
Bij een checkout heb je helemaal niet van dit soort problemen.
Om de pasta theorie ermaar bij te houden: Distributed is in mijn ogen zoiets als Spaghetti van verschillende stukjes lengte en dikte allemaal in een wirwar door elkaar en je probeert dit uit de knoop te halen.
Centraal is meer zoiets als Ravioli, makkelijker te scheiden maar je moet ze nog wel open maken om te kijken in welke kaas en in welke vlees/tomaat zit

. (je favoriete stukje uitzoeken in het geval van een fout).
Check-out is voor mij pizza: 1 groot stuk, beetje lomp misschien maar hoppa meteen opeten!
Natuurlijk begrijp ik dat als GiT gebruikt wordt voor OA de linux kernel dat veel problemen zijn opgelost of dat dit doomscenario wel door software op te lossen is. Maar als bedrijf waar je meer invloed hebt op wie wat waar wanneer, en dat iedereen apparte taken heeft vaak, lijkt me een check-out systeem het meest robuust. (sowieso altijd het meest robuust, maar in dit geval ook het meest handige/waardevolste). In dit geval kun je natuurlijk ook naar je collega toelopen of ie even uit kan checken.

.
Dus ja ik begrijp de uses voor een distrubited aanpak, maar zelf zie ik me het nog niet zo snel gebruiken en kies ik liever voor de compleet tegenovergestelde aanpak, maar ook omdat dit tot nu toe in mijn projectjes e.d. het meest handige was. (Hoewel het toch meestal uitkwam op standaard SVN zonder checkout).
Deze nadelen kwamen ook nog naar boven op de gelinkte site en vond ik wel zo belangrijk om hier neer te zetten, er wordt alleen nergens echt aangestipt over het mergen, wel deels door het "there is no latest version" probleem.
here’s not really a “latest version”. If there’s no central location, you don’t immediately know whether to see Sue, Joe or Eve for the latest version. Again, a central location helps clarify what the latest “stable” release is.
There aren’t really revision numbers. Every repo has its own revision numbers depending on the changes. Instead, people refer to change numbers: Pardon me, do you have change fa33e7b? (Remember, the id is an ugly guid). Thankfully, you can tag releases with meaningful names.
Natuurlijk voor de objectiviteit ook even de voordelen erbij (ben het er grotendeels mee eens)
Everyone has a local sandbox. You can make changes and roll back, all on your local machine. No more giant checkins; your incremental history is in your repo.
It works offline. You only need to be online to share changes. Otherwise, you can happily stay on your local machine, checking in and undoing, no matter if the “server” is down or you’re on an airplane.
It’s fast. Diffs, commits and reverts are all done locally. There’s no shaky network or server to ask for old
revisions from a year ago.
It handles changes well. Distributed version control systems were built around sharing changes. Every change has a guid which makes it easy to track.
Branching and merging is easy. Because every developer “has their own branch”, every shared change is like reverse integration. But the guids make it easy to automatically combine changes and avoid duplicates.
Less management. Distributed VCSes are easy to get running; there’s no “always-running” server software to install. Also, DVCSes may not require you to “add” new users; you just pick what URLs to pull from. This can avoid political headaches in large projects.
[
Voor 23% gewijzigd door
roy-t op 13-02-2009 00:01
]