[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