Warum muß man das wissen, wenn man einfach
immer mit der aktuellen Version arbeitet? Ein "pull" dauert nicht lange und auch bei einer Differenz von Eins oder Zwei zwischen zwei Changesets im SVN muß man sich ja entweder dafür entscheiden, die "unbesehen" zu aktualisieren oder sich den Inhalt genauer anzusehen.
Oder aktualisierst Du Deine ausgecheckten Dateien erst dann, wenn eine "Mindestdifferenz" zwischen den CS-Nummern besteht?
Wenn man schon Paradigmen wie "Continuous Delivery" oder "Continuous Integration" verwenden (also fertige (abgeschlossene) Einheiten umgehend zur Verfügung stellen) will, macht das ja nur dann Sinn, wenn die eingecheckten Änderungen auch in jedem Falle ankommen beim "Anwender". Das setzt natürlich voraus, daß man jederzeit einen funktionierenden Stand in dem Zweig hat, der für die Öffentlichkeit gedacht ist ... und sogar das macht "git" wieder extrem gut, weil man sich seine Branches in einem lokalen Repository erst mal so weit zusammenbasteln (und testen) kann, daß sie auch funktionieren, bevor man sie "an die Öffentlichkeit" gibt.
Bei mir sehen die Repos für ein Projekt z.B. so aus:
Code:
vidar:/home/GitHub/freetz $ git remote -v
github [email protected]:PeterPawn/freetz.git (fetch)
github [email protected]:PeterPawn/freetz.git (push)
origin git@git:/srv/git/freetz.git (fetch)
origin git@git:/srv/git/freetz.git (push)
upstream https://github.com/Freetz/freetz.git (fetch)
upstream https://github.com/Freetz/freetz.git (push)
vidar:/home/GitHub/freetz $
Vom "upstream" kommen die SVN-Änderungen, das "origin"-Repo ist ein Fork von "Freetz/freetz" (auf einem lokalen Server hier, das kann ggf. sogar eine FRITZ!Box sein, wenn man das "git"-Paket aus Freetz installiert) und "github" ist mein Freetz-Fork eben dort bei GitHub, in dem das am Ende alles wieder landen soll.
Wenn ich jetzt etwas ändern will, dann mache ich in "origin" einen Branch auf, fasse da alle (thematisch zu diesem Branch gehörenden) Änderungen zusammen, kann auf der Basis dieses Branches auch lokale Checkouts auf anderen PCs machen, die Änderungen so testen und optimieren und wenn sie fertig sind, werden sie auf das "github"-Repo übertragen.
Zwar hält man das nicht immer durch (manchmal macht man auch einen schnellen "push" nach "github", weil man zu faul zum eigenen Test ist), aber vom Prinzip her funktioniert die verteilte Entwicklung und die Arbeit an einem gemeinsamen Projekt so (wobei dann Freetz ein schlechtes Beispiel war) und damit muß der "Anwender" in meinen Augen gar nicht wissen, wieviele Commits genau nun zwischen seinem letzten Stand und dem aktuellen liegen ... es sei denn, er ist selbst Entwickler und will das alles ganz genau wissen - dann muß er aber ohnehin durch die (zeitlich sortierte) Liste
aller Änderungen und es ist wieder egal, wie diese nun "nummeriert" sind.
Der große Vorteil, die Commits mit ihrem Hash-Wert zu verwalten, ist es nun mal, daß damit auch mittendrin welche herausfallen oder hinzukommen können (man kann also Patches (Commits) auch in einer anderen Reihenfolge anwenden - "reorder on rebase"), was bei sequentieller Nummerierung entweder die Reihenfolge auch ändert oder Löcher läßt oder "Unternummern" erfordert, wenn weitere (zwischen zwei älteren) hinzukommen sollen.