Re: [Neo] Git und Mercurial

2010-05-21 Diskussionsfäden Dennis Heidsiek

Hallo allerseits,


Arne Babenhauserheide ſchrieb am 12.05.2010 16:03 Uhr:

Ich selbst habe mir inzwischen schon mehrfach mit git bei Standardaufgaben böse 
in den Fuß geschossen (soweit, dass ich neu klonen musste), mit Mercurial 
dagegen noch nie.


Dann kann ich allerdings gut nachvollziehen, warum Du jetzt Git eher 
abgeneigt bist, so etwas sollte natürlich definitiv nicht passieren. Ich 
selbst habe mir erst ein einziges Mal ein Git-Repository so total 
vermurkst, dass ich mir lieber das letzte Backup neu geklont habe, aber 
dass war definitiv mir anzulasten – ich war da noch hundertprozentig in 
der alten SVN-Denke verhaftet und wusste mit einem DVCS noch nicht 
richtig umzugehen.



Und Mercurial bedient sich grundlegend wie Subversion, wenn man im Kopf behält, 
dass commit nur lokal wirkt und pull/push neue Änderungen holen bzw.
rausschicken.


Wie bereits gesagt bin ich der Ansicht, das sich Mercurial und Git in 
der Bedienung nicht so sehr voneinander unterscheiden; und gewisse 
Schwierigkeiten vom Umstieg von SVN auf ein DVCS sind (leider) einfach 
nicht zu vermeiden, einfach da sich hier ganz neue Arbeitsabläufe 
eröffnen. Aber auch Git kann man wie ein SVN bedienen … man kann sogar 
auf ein SVN zugreifen :).



Doch: Das Mercurial Plugin funktioniert auch in die andere Richtung:


Klar, das Plugin selbst funktioniert bidirektional und kann die beiden 
Formate ineinander unwandeln aber es liegt eben nur für hg- und nicht 
für git-Clients vor (das meinte ich).



Mercurial baut auf jedem System auf dem auch git baut […] in Python[…] 
geschrieben


humorDas wäre dann wieder ein Punkt für Git: “Python? That is for children. A 
Klingon Warrior uses only machine code, keyed in on the front panel switches in raw 
binary.” ;)/humor


Für mich ist seltsamerweise gerade die Datenstruktur ein Grund Mercurial zu 
nutzen.


Ich finde das doch recht witzig, wir finden den selben Aspekt wichtig, 
aber sind zu genau entgegengesetzten Einschätzungen gekommen. An der 
Git-Datenstruktur schätze ich, dass sie auf der untersten Ebene recht 
simpel ist und gleichzeitig jede Redundanz vermeidet – vielleicht sind 
deshalb die git-Repositories im Allgmeinen die Kleinsten (ja, ich habe 
hier mal wieder ein git gc vorausgesetzt).



Es verwendet zwar auch Patches, speichert sie aber in einem Dateibaum, der 
bessere Zugriffssemantiken bietet (Festplatten-seeks vermeiden) und nutzt 
snapshots (wie in Videokomprimierung), um den Zugriff zu beschleunigen.


Eigentlich arbeitet Git da recht ähnlich, in den Packfiles gibt es auch 
unkomprimierte Schnappschüsse, Deltakodierung und Indizierung für einen 
schnelleren Zugriff. Ich glaube, in dieser Frage werden wir einfach 
nicht zueinander finden … einigen wir uns darauf, das wir uns uneinig 
sind :).


Arne Babenhauserheide ſchrieb am 18.05.2010 07:42 Uhr:

Christian Kluge ſchrieb:
   

1.7.* ist doch schon seit Ewigkeiten raus

Wird aber von den Gentoo-Maintainern noch nicht als stabil betrachtet, deshalb 
habe ich es nicht. Ich nutze Testversionen nur bei den Sachen, bei
denen ich wirklich die neusten Features testen will. Der Rest hat einfach zu 
laufen, und da vertraue ich auf das Urteil der Maintainer.


Und ich würde keinen Distributions-Maintainern glauben, die glauben 
kompetenter als die eigentlicher Software-Maintainer zu sein ;): “The 
latest stable Git release is v1.7.1.” (http://git-scm.com/).



git checkout -h

Ah, darauf warte ich seit Jahren!


Dann hat Dir die neue Version doch etwas gebracht, 
#Friede_Freude_Eierkuche :).



Allerdings könnten „-bnew branch  → branch“ u.ä. doch etwas ausführlicher 
sein…


“Specifications are for the weak and timid!”¹ ;) – aber inzwischen ist 
die Git-Dokumentation recht gut ausgebaut (am Anfang war die wohl noch 
/richtig/ mies im Vergleich zu Mercurial), wobei ich niemanden empfehlen 
würde, Git oder auch Mercurial ausſchließlich über die Manpages zu 
lernen. Dafür gibt es einfach viel zu viele, und man kann sich ja wohl 
kaum alphabetisch durchlesen … besser ist es da, mit einem guten 
Tutorial anzufangen.



Nebenbei: Hast du gemerkt, dass auf einem deutschen System der Großteil der 
Ausgabe von Mercurial auf Deutsch ist?


Erst jetzt, wo Du es sagst :). Wobei ich kein Problem mit Englisch habe, 
und bei Kommandozeilenbefehlen sogar lieber englischſprachige Manpages 
lese, einfach weil ich mir dann die Abkürzungen besser merken kann – rm 
-f steht ja für “remove --force”, und nicht für löschen --erzwingen.



Viele Grüße,
Dennis-ſ


¹ http://gradha.sdf-eu.org/textos/klingon_programmer.en.html



Re: [Neo] Git und Mercurial

2010-05-21 Diskussionsfäden Arne Babenhauserheide
Dennis Heidsiek wrote:

 Wie bereits gesagt bin ich der Ansicht, das sich Mercurial und Git in
 der Bedienung nicht so sehr voneinander unterscheiden; und gewisse
 Schwierigkeiten vom Umstieg von SVN auf ein DVCS sind (leider) einfach
 nicht zu vermeiden, einfach da sich hier ganz neue Arbeitsabläufe
 eröffnen. 

Der einzige wirkliche Fehler den ich bisher (selbst bei einem Computer-DAU) 
mit Mercurial erlebt habe, ist zu vergessen zu pushen oder zu pullen 
(solange keine als experimentell ausgezeichnete Module genutzt wurden). 

Selbst einen merge habe ich letztens über’s telefon erklaärt, und das 
komplizierteste war, dass ich kein TortoiseHG nutze, der andere aber schon 
(finden der richtigen Tasten :) ). 

(auf der Kommandozeile wäre es noch einfacher gewesen)

 Aber auch Git kann man wie ein SVN bedienen … man kann sogar
 auf ein SVN zugreifen :).

Wie mit hgsubversion (Mercurial extension die ähnliche Strukturen nutzt wie 
hg-git) :)

 Doch: Das Mercurial Plugin funktioniert auch in die andere Richtung:
 
 Klar, das Plugin selbst funktioniert bidirektional und kann die beiden
 Formate ineinander unwandeln aber es liegt eben nur für hg- und nicht
 für git-Clients vor (das meinte ich).

Jupp, aber es ändert nichts wesentliches am workflow (man muss halt einen 
Mercurial aufrufenden hook in seinem lokalen git repo erstellen :) ). 

 Mercurial baut auf jedem System auf dem auch git baut […] in Python[…]
 geschrieben
 
 humorDas wäre dann wieder ein Punkt für Git: “Python? That is for
 children. A Klingon Warrior uses only machine code, keyed in on the front
 panel switches in raw binary.” ;)/humor

;) 

 Ich finde das doch recht witzig, wir finden den selben Aspekt wichtig,
 aber sind zu genau entgegengesetzten Einschätzungen gekommen. An der
 Git-Datenstruktur schätze ich, dass sie auf der untersten Ebene recht
 simpel ist und gleichzeitig jede Redundanz vermeidet – vielleicht sind
 deshalb die git-Repositories im Allgmeinen die Kleinsten (ja, ich habe
 hier mal wieder ein git gc vorausgesetzt).

Was ich im Gegenzug bei Mercurial schätze ist, dass die Struktur genau für 
ihre Aufgabe optimiert ist. 

Sie ist sogar auf Zugriffsstruktur von Dateisystemen optimiert: Daten sind 
im store in einem Dateibaum, der dem Arbeitsverzeichnis entspricht, weil 
sich so beim sortierten Auslesen (das machen die meisten Dateisysteme) der 
Festplattenkopf am wenigsten bewegen muss. 

Deswegen ist auch bei einem update via Mercurial die Platte sehr viel leiser 
als bei git (ich höre das deutlich; meine Platte rattert). 

Und deswegen sind git repos kleiner. 

hey, und ich kann gerade den Zirkelschluss zu Tastaturbelegungen ziehen: Ein 
Layout, das nur auf Tastenpositionen und Fingerwiederholungen achtet, hat 
(bei maximaler Optimierung) gezwungenermaßen bessere Tastenpositionen und 
weniger Fingerwiederholungen als eins, das zusätzlich beachtet, dass nicht 
erst ein Finger oben und dann der direkt daneben unten eingesetzt wird. 

Welches von ihnen besser zum Tippen ist, hängt von der Flexibilität der 
Finger ab :) 

 Eigentlich arbeitet Git da recht ähnlich, in den Packfiles gibt es auch
 unkomprimierte Schnappschüsse, Deltakodierung und Indizierung für einen
 schnelleren Zugriff. 

Der Unterschied ist halt, dass das bei Mercurial direkt beim committen on-
the-fly passiert. Aber sie haben auch beide immer wieder voneinander gelernt 
– was ich sehr gut finde!

 Ich glaube, in dieser Frage werden wir einfach
 nicht zueinander finden … einigen wir uns darauf, das wir uns uneinig
 sind :).

Ich denke, da werden wir nicht drum rum kommen. Immerhin sind wir aber 
bereits fast an der untersten Ebene (statt „A  B ⇒|⇐ B  A“ sind wir bei „A 
macht das so, was ich wegen X besser finde als das, wie B es macht ⇒|⇐ Mir 
ist aber Y wichtiger als X, und das kann B besser“), so dass die Diskussion, 
finde ich, fruchtbar und sinnvoll war – und auch einen schönen Abschluss 
hat. 

 Und ich würde keinen Distributions-Maintainern glauben, die glauben
 kompetenter als die eigentlicher Software-Maintainer zu sein ;): “The
 latest stable Git release is v1.7.1.” (http://git-scm.com/).

Ich schon. Die distributions-maintainer sehen nämlich ein viel breiteres 
Bild als die Software-Entwickler. Sie testen gegen die verschiedensten 
setups und binden oft noch patches ein, um alles zum Laufen zu kriegen. 

 Dann hat Dir die neue Version doch etwas gebracht,
 #Friede_Freude_Eierkuche :).

Sie wird mir was bringen, wenn sie stable wird :) 

(am Anfang war die wohl noch
 /richtig/ mies im Vergleich zu Mercurial), 

Auch ohne den Vergleich, ja :) 

 wobei ich niemanden empfehlen
 würde, Git oder auch Mercurial ausſchließlich über die Manpages zu
 lernen. Dafür gibt es einfach viel zu viele, und man kann sich ja wohl
 kaum alphabetisch durchlesen … besser ist es da, mit einem guten
 Tutorial anzufangen.

Stimmt. 

Warum haben wir eigentlich kein `tut git` und `tut hg` als Erweiterung zu 
`man git` und `man hg`? 

Ein standard tutorial-viewer wäre toll! 

 

Re: [Neo] Git und Mercurial

2010-05-21 Diskussionsfäden Arne Babenhauserheide
Dennis Heidsiek wrote:

 Und ich würde keinen Distributions-Maintainern glauben, die glauben
 kompetenter als die eigentlicher Software-Maintainer zu sein ;): “The
 latest stable Git release is v1.7.1.” (http://git-scm.com/).

$ ls /usr/portage/dev-vcs/git/files/*patch
/usr/portage/dev-vcs/git/files/git-1.6.6-always-install-js.patch
/usr/portage/dev-vcs/git/files/git-1.7.1-always-install-js.patch
/usr/portage/dev-vcs/git/files/git-1.7.0-always-install-js.patch

$ cat /usr/portage/dev-vcs/git/files/git-1.7.1-*.patch | head -n 4
JS install cleanup fixes

- Also ensure the minified JS is built before instaweb as it is referenced 
in
  the sed expression.

Liebe Grüße, 
Arne



Re: [Neo] Git und Mercurial

2010-05-18 Diskussionsfäden Arne Babenhauserheide
Christian Kluge wrote:

 $ git version
 git version 1.6.4.4
 1.7.* ist doch schon seit Ewigkeiten raus

Wird aber von den Gentoo-Maintainern noch nicht als stabil betrachtet, 
deshalb habe ich es nicht. Ich nutze Testversionen nur bei den Sachen, bei 
denen ich wirklich die neusten Features testen will. Der Rest hat einfach zu 
laufen, und da vertraue ich auf das Urteil der Maintainer. 

 git --version
 git version 1.7.1.28.g54c98
 
 git checkout -h
 usage: git checkout [options] branch
or: git checkout [options] [branch] -- file...
 
 -q, --quiet   be quiet
 -b new branch   branch
 -llog for new branch
 -t, --track   track
 -2, --oursstage
 -3, --theirs  stage
 -f, --force   force
 -m, --merge   merge
 --conflict styleconflict style (merge or diff3)
 -p, --patch   select hunks interactively

Ah, darauf warte ich seit Jahren! 

Allerdings könnten „-b new branch → branch“ u.ä. doch etwas ausführlicher 
sein… 

Nebenbei: Hast du gemerkt, dass auf einem deutschen System der Großteil der 
Ausgabe von Mercurial auf Deutsch ist?

Liebe Grüße, 
Arne



Re: [Neo] Git und Mercurial (was: Re: Individualisierte Layouts als Vision?)

2010-05-12 Diskussionsfäden Arne Babenhauserheide
Dennis Heidsiek wrote:

 Stimmt, aus der (zeitlichen) Distanz wirkt das teilweise doch etwas
 übertrieben, aber die waren halt mit Herzblut bei der Sache … und jede
 Zeit hat ja sowieso ihre eignen Glaubenskriege, ich nenne jetzt einfach
 mal hg vs. git ;).

Oh ja ;) 


   (deutlich leichter für SVN Nutzer zu verwenden¹),
 
 Würde ich nicht mehr sagen, die beiden sind sich auch in der Bedienung
 doch sehr ähnlich – siehe Vortrag.

Ich selbst habe mir inzwischen schon mehrfach mit git bei Standardaufgaben 
böse in den Fuß geschossen (soweit, dass ich neu klonen musste), mit 
Mercurial dagegen noch nie. 

Und Mercurial bedient sich grundlegend wie Subversion, wenn man im Kopf 
behält, dass commit nur lokal wirkt und pull/push neue Änderungen holen bzw. 
rausschicken. 

 Ansonsten verweise ich auf:
 http://www.whygitisbetterthanx.com/

Als Gegenpunkt zur besseren Lernbarkeit: 


### Git ###

$ git version
git version 1.6.4.4



$ git checkout -h
fatal: Not a git repository (or any of the parent directories): .git

(Warum keine Hilfe?)



$ git checkout --help
…(man page)…
NAME
   git-checkout - Checkout a branch or paths to the working tree

SYNOPSIS
   git checkout [-q] [-f] [-m] [branch]
   git checkout [-q] [-f] [-m] [-b new_branch] [start_point]
   git checkout [-f|--ours|--theirs|-m|--conflict=style] [tree-
ish] [--] paths...
…
   When paths are not given, this command switches branches…

   If -b is given, a new branch is created and checked out, as if 
   git-branch(1) were called…

   When paths are given, this command does not switch branches…In this 
   case, the -b and --track options are meaningless and giving either of 
   them results in an error…
…



$ git pull -h
Usage: git pull [-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff] 
[-s strategy]... [fetch-options] repo head...

Fetch one or more remote refs and merge it/them into the current HEAD.




### Mercurial ###

$ hg version
Mercurial Distributed SCM (version 1.5.2)

Copyright (C) 2005-2010 Matt Mackall m...@selenic.com und andere
Dies ist freie Software; siehe Quellen für Kopierbestimmungen. Es besteht
KEINE Gewährleistung für das Programm, nicht einmal der Marktreife oder der
Verwendbarkeit für einen bestimmten Zweck.



$ hg update -h
hg update [-c] [-C] [-d DATUM] [[-r] REV]

Aliase: up, checkout, co

Aktualisiert das Arbeitsverzeichnis

Hebt das Arbeitsverzeichnis auf die angegebene Revision an.

Wird keine Revision angegeben, wird zum Kopf des derzeitigen Zweigs 
aktualisiert, falls dieser ein Nachfahr des direkten
Vorgängers der Arbeitskopie ist. Ansonsten bricht die Operation ab.
…
Optionen:

 -C --clean  Entferne nicht versionierte Änderungen (kein Backup)
…



$ hg pull -h
hg pull [-u] [-f] [-r REV]... [-e CMD] [--remotecmd CMD] [QUELLE]

Holt Änderungen aus dem angegebenen Projektarchiv

Überträgt Änderungen aus einem entfernten Archiv in das lokale.

Dabei werden alle Änderungen vom Archiv am angegebenen Pfad oder URL 
gesucht und dem lokalen Archiv hinzugefügt.
Standardmäßig wird die Kopie des Projektes im Arbeitsverzeichnis nicht 
aktualisiert.
…



 Wie schon auf Identi.ca gesagt, haben die GitHuber ein Plugin
 geschrieben, mit der ein Hg-Client mit einem Git-Repository arbeiten
 kann, schon von daher würde ich bei Neo eher zu einem Git-Repo
 tendieren, dann kann jeder den Client benutzen, der ihm am besten passt
 :).  Leider haben die Bitbucker noch kein Hg-Plugin für Git geschrieben …

Doch: Das Mercurial Plugin funktioniert auch in die andere Richtung: Du 
kannst einfach mit Mercurial clonen, in dem hg repo ein Git repo erzeugen 
(hg gexport) und dann mit git von da ziehen. 

→ Details: http://mercurial.selenic.com/wiki/HgGit

Es funktioniert also in jede Richtung – und Mercurial baut auf jedem System 
auf dem auch git baut (Mercurial ist in Python[¹] geschrieben, so dass es 
überall läuft wo es Python gibt – also fast überall). 

¹: plus ein paar kleine, portable C Erweiterungen

 Ist doch schön, dann steckst Du doch in der Materie :). Und ich verhehle
 auch nicht, dass meine Sympatien eher bei Git liegen (obwohl ich am
 Anfang auch eher zu Mercurial tendierte, da es da einen schöneren und
 einfacheren Windows-Installer hatte … aber inzwischen finde ich die
 Git-Datenstruktur doch ziemlich elegant :)).

Für mich ist seltsamerweise gerade die Datenstruktur ein Grund Mercurial zu 
nutzen. Es verwendet zwar auch Patches, speichert sie aber in einem 
Dateibaum, der bessere Zugriffssemantiken bietet (Festplatten-seeks 
vermeiden) und nutzt snapshots (wie in Videokomprimierung), um den Zugriff 
zu beschleunigen. 

→ http://hgbook.red-bean.com/read/behind-the-scenes.html

Das ist optimiert für das, was ich damit machen will, also 
Versionsverwaltung. Und das gleiche gilt für das UI von Mercurial, seine 
Hilfe usw.

Konzeptuell passiert dasselbe, aber das Datenformat von Mercurial ist meinem 
Meinung nach einfach eleganter als 

Re: [Neo] Git und Mercurial

2010-05-12 Diskussionsfäden Christian Kluge
Arne Babenhauserheide schrieb am 12.05.2010 16:03:

 Als Gegenpunkt zur besseren Lernbarkeit: 
 
 
 ### Git ###
 
 $ git version
 git version 1.6.4.4
 

  1.7.* ist doch schon seit Ewigkeiten raus

 
 $ git checkout -h
 fatal: Not a git repository (or any of the parent directories): .git
 
 (Warum keine Hilfe?)
 


Siehe oben, weil die Version zu alt ist:


git --version
git version 1.7.1.28.g54c98

git checkout -h
usage: git checkout [options] branch
   or: git checkout [options] [branch] -- file...

-q, --quiet   be quiet
-b new branch   branch
-llog for new branch
-t, --track   track
-2, --oursstage
-3, --theirs  stage
-f, --force   force
-m, --merge   merge
--conflict styleconflict style (merge or diff3)
-p, --patch   select hunks interactively


Mit freundlichen Grüßen

Frakturfreak
-- 
Wenns halt war, wies halt war, irgendwie wars, denn noch nie wars, dass
es nicht irgendwie war.

Mein Blog: http://frakturfreaks-kleine-dinge.1on.de/



signature.asc
Description: OpenPGP digital signature