[linux-l] Re: VCS

Rocco Rutte pdmef at cs.tu-berlin.de
Do Apr 13 21:12:58 CEST 2006


* Jan-Benedict Glaw <jbglaw at lug-owl.de>:

>GIT--Arbeiten mit branches macht Spaß!

Ich wollte heute früh nurmal schnell damit rumspielen und gucken, was es 
so kann. So, und nach ein paar Stunden: Jetzt habe ich kein subversion 
mehr.

Ein paar Erfahrungen neben den offensichtlichen Dingen (verteilt vs. 
zentral), wenn es jemanden interessiert.

Punkt 1: git regelt. Etwas sachlicher: ich nachinhein ist die 
Architektur (also die Binaries und deren Namen, Repo Organisation, etc.) 
sehr logisch strukturiert und sofort einsichtig. Subversion macht da mit 
seinen Metadaten keinen Spass.

Punkt 2: in git sind keine merges angestrickt sondern normale 
Update-Prozuren via push/pull sind nur merges, also eingebaut. Damit 
gehen auch merges zwischen Branches. Mit subversion hat man bei merges 
echt total verloren (weil man sich vor jedem Merge die richtigen 
Revisions per Hand suchen muss und gerade auch bei gespiegelten Archiven 
verbringt man mehr Zeit mit Log durchsuchen als alles andere; ich war 
wirklich kurz davor ein trace-Script zu schreiben, wenn mir git nicht in 
"Quere" gekommen wäre.)

Punkt 3: git bringt mir auf dem Schirm, was einen interessiert bzw. was 
wirklich wichtig ist. Bei subversion muss man oftmals noch ein "|less" 
anhängen, weil es nur "alles oder nichts" gibt. Nettes Detail nebenbei: 
mit 'git commit -a -v' bekomme ich endlich auch ein diff im Editor und 
brauche kein anderes Terminal mehr, um einen größeren Satz durchzugehen 
(durchdacht eben).

Wegen der Diskussion, womit man jetzt Einsteiger heranführen sollte: 
ganz klar mit verteilten Systemen, weil das Konzept einfach logisch 
klarer ist.

Es gibt ein Verzeichnis xy mit Versionskontrolle, d.h. auch genau dort 
ein paar Metadaten und Tools, um diese Metadaten zu verwalten (zum 
Beispiel löschen: rm foo und git-update-index ist logisch klarer als svn 
delete foo, was dann die Datei selbst löscht). Wenn man das jetzt in ein 
anderes Verzeichnis übernehmen will, was aber schon eine 
Versionkontrolle hat, dann macht man es eben.

Bei subversion wüsste ich spontan nicht, wie ich zwei Repositories 
zusammenführen kann (außer über den "Meta"-Weg mit svn:externals, was 
nicht zählt[0]). Ich habe schon 'svnadmin load' mit zwei 
verschiedenen Dumps gemacht, aber irgendwie fehlt da ein Stück beim 
log-Output. Mit git kein Problem (von der Logik her: warum sollte es 
auch ein Problem sein?): git pull /foo/bar ; git commit (wieder ein 
nettes Detail: er schreibt mir gleich ins Log woher er es gemerged hat).

   bye, Rocco
[0] mit svn:externals kann man bequem Meta-Repos bauen und subversion 
die Quellen für Verzeichnis foo aus einer anderen URL holen. Nachteil: 
svn commit ignoriert es und manuelle Commits nur auf das External 
wandern in dessen Original, d.h. ein einfacher "Import" (git pull) ist 
nicht drin.
-- 
:wq!



Mehr Informationen über die Mailingliste linux-l