[linux-l] Nutzt jemand Git?

Volker Grabsch vog at notjusthosting.com
Di Mai 5 00:47:03 CEST 2009


Steffen Dettmer <steffen at dett.de> schrieb:
> nutzt hier eigentlich jemand Git (DVCS)?

Ich benutze vorallem Darcs und Mercurial. Wenn's unbedingt
sein muss, nehme ich auch Git.

> Bei uns in der Firma will man uns am liebsten
> nach SVN migrieren. mmm... Heute noch zu SVN? Für mich wirkt SVN
> eher wie ein CVS mit ein paar Bugfixes (und paar weniger
> Features, die die meisten aber nicht brauchen).

Es gibt Anwendungs-Szenarien, in denen SVN durchaus angebrachter
als ein DVCS. Das, was du beschreibst, scheint aber kein solches
Szenario zu sein. :-)

> Praktisch interessiert mich aber, ob Git in der Praxis auch für
> `nicht-Freaks' nutzbar ist (z.B. für outsourced development).

Grundsätzlich ja. Aber nur, wenn die Entwickler willig sind,
umzulernen. Es ist nebensächlich, ob es Bazar, Git, Mercurial
oder Darcs ist. Viel wichtiger ist, dass die Entwickler von
dem Ding schon Gutes gehört haben, bzw. davon begeistert sind
("... wollte ich schon immer mal ausprobieren.")

> Ich
> persönlich fand (nach Doku, praktische Erfahrungen habe ich ja
> nicht) es eigentlich einfach. Klar, man muss sich darauf
> einlassen, aber dann gibt es viele Features, die ich mir bei CVS
> und SVN (was ich kaum nutze) schon immer gewünscht habe.

Dem kann ich nur zustimmen, und wenn deine Kollegen der gleichen
Meinung sind, spricht nichts gegen einen Umstieg auf ein DVCS.

> Allerdings braucht man auch Konventionen, beispielsweise wie ein
> (oder mehrere) Austausch-Repos zu verwenden sind. Im Git Handbuch
> ist ein Diagramm mit zwei Partnern. Dort hat jeder ein public
> repo. Kann man da nicht auch einfach ein gemeinsames public repo
> nehmen?

Auf diese Frage gibt es zwei Standard-Antworten:

1. Ein zentrales Repository, in das jeder etwas hochladen kann,
   ist meistens keine gute Idee. Es ist ein Symptom eines Planungs-
   Fehlers, der dadurch zustande kommt, dass sich der Planer an die
   Einschränkungen von CVS/SVN zu sehr gewöhnt hat.

2. Wenn es wider Erwarten gute Gründe dafür geben sollte, nimm
   besser _nicht Git_ dafür. Das Verhalten von "git push" ist
   m.E.n. hochgradig kontra-intuitiv. Nimm stattdessen Mercurial
   oder Darcs, denn "hg push" bzw. "darcs push" tun genau das,
   was man erwartet.

Anders gesagt: Ich habe den Eindruck, dass Git vorrangig für
Nur-Pull-Szenarien ausgelegt ist. Push-Szenarien machen mit Git
keinen Spaß, aber die hat man auch praktisch nie.

> Ich hätte also gern mindestes für Backups eine Art `zentrales
> Repo'.

Wenn das der einzige Grund ist, trifft Punkt 1. (siehe oben) zu.

Wenn du ein großes Repository mit allen Branches und Changesets
hast, weiß dieses Repository immer noch nicht, welcher Entwickler
welche Teilmenge der Changeset gerade in seinem Arbeits-Repository
hat. Es wäre daher unverantwortlich, nur dieses große Repository
zu sichern. Ich persönlich denke, dass in jedem Fall sämtliche
Entwickler-Rechner gesichert werden sollten.

> Das `zentrale Repo' aus build-Sicht (wenn man CVS:GIT wie
> 1:1 mappt :)) wäre IMHO das Arbeitsreprository des Integrators.

Wenn ihr einen Integrator habt, sollte dieser regelmäßig
aus allen anderen Repositories "pull"en. Ich halte es für
keine gute Idee, dass die Entwickler ungefragt ins Repository
des Integrators ihr Zeug hinein-"push"en können. Das mag bei
CVS und SVN üblich sein, aber nur, weil's dort nicht anders
geht.

> Gut, bei einem 10 KLOC project ist's egal,
> aber da reicht auch CVS oder gar ein SVN,

Kurze Anmerkung, auch wenn's nichts mit der eigentlichen
Frage zu tun hat:

_Gerade_ bei kleinen Projekten sollte man auf CVS oder SVN
verzichten!

Grund #1: Wenn man sich eh in DVCS einarbeiten möchte, ist so
ein kleines Projekt die ideale Gelegenheit.

Grund #2: Bei CVS und SVN brauchst du immer noch irgendwo ein
zentrales Repository, was höheren Admin-Aufwand bedeutet, und
es kettet all deine Mini-Projekte an ein zentrales Repository.
Sowas hab ich früher gemacht, und es ist nervend. Ich bin dann
dazu übergegangen, jedem Projekt ein eigenes SVN-Repsitory direkt
im Projekt-Ordner anzulegen, sodass alles, was zum Mini-Projekt
dazu gehört, an einer Stelle ist. Bei einem DVCS brauchst den
Quatsch nicht. Ein "hg init" oder "darcs init" genügt, und schon
ist das Repository (= Arbeitsverzeichnis) sofort einsatzbereit!

> Tja, und noch ein Detail. Ich CVS-Files haben wir immer schön
> "$Name: $". Das hat einen wichtigen Grund. Wenn nämlich jemand
> ein CVS Export File ändert und uns zurückschickt, weiß er nicht,
> wo er das mal herhatte.

Sowohl SVN als auch die DVCS haben ebenfalls solch eine Möglich-
keit, da musst du einfach in der Doku nachschlagen. Allerdings
machen sie es alle auf unterschiedliche Art und Weise. In SVN
ist es ein Property, in Mercurial ein Postprocessing-Script, etc.


Gruß,

    Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l