Thread Source Code verwalten
(30 answers)
Opened by tophoven at 2009-07-15 09:40 2009-07-22T09:25:41 sid burn "Normal" ist hier eine Definitionsfrage. Git speichert ein kompliziertes Containerformat, das einem Dateisystemimage ähnelt. Dadurch erhöht sich die Komplexität des Codes, den Git benötigt, um auf seine Repositories zuzugreifen, wesentlich. Meiner Meinung nach ergeben sich dadurch aber andereseits keine nennenswerten Vorteile. Quote Dadurch erhöht sich zwar die Datensicherheit des Dateisystemes oder der Platten nicht, allerdings wird die Rekonstruktion nach einem katastrophalen Datenschaden leichter, bzw. überhaupt erst möglich. Und das sehe ich bei Versionsgeschichten nunmal als Vorteil. Um das also nochmal zu betonen: Ich stimme Dir vollkommen zu, dass Backups, RAIDs und andere technische Maßnahmen für die Datensicherheit unverzichtbar sind und dass ein redundanteres oder einfacheres Speicherformat sie keinesfalls ersetzen kann. Für den Fall, dass alle verteilten (Sicherungs-)Kopien böswillig in die Luft gesprengt wurden und nurmehr eine einzige, etwas angekokelte Platte mit einem partiellen Datensatz vorhanden ist, will ich aber immer noch eine Chance zur Datenrettung haben, und wünsche mir daher ein Format, bei dem ich notfalls die Chance habe, die Bytes einzeln von Hand wieder zusammenzusetzen ;-) Quote Soweit ich gehört habe, ging es dabei um ein Verhalten in ext4, welches das übliche Verfahren zum atomaren Ersetzen einer Datei (temporäre Datei auf dem gleichen Dateisystem erstellen, mit Daten füllen, durch Umbenennen der temporären Datei die ursprüngliche Datei ersetzen) unsicher machte, wenn man hinterher keinen full sync ausführte. Vorrausgesetzt diese Information ist korrekt, so halte ich das durchaus für einen Bug, da nur der Rootbenutzer einen full sync ausführen kann und sich auch so ungefähr jedes Datenbanksystem darauf verlässt, dass dieses atomare Dateiersetzen funktioniert, um Transaktionssicherheit zu gewährleisten. Quote Ich meine, dass die relevante Datenmenge bei Datenbanken üblicherweise groß ist, bei Versionskontrollsystemen üblicherweise klein. Ein Versionskontrollsystem speichert lediglich wenige Metainformationen und die Größe der versionierten Daten selber tut wenig zur Sache, da deren Inhalt primär nur abrufbar sein muss, aber nicht irgendwie vom Versionskontrollsystem interpretiert werden muss. Daher könnte man die Metainformationen meiner Meinung nach ohne Probleme als Textdateien ablegen. Quote Ich sagte ja auch "einige Dateideskriptoren", nicht "einige tausend Dateideskriptoren". Ein Versionskontrollsystem muss auch bei einem Speicherformat mit vielen Dateien nur größenordnungsmäßig vier Deskriptoren offen halten -- einen für eine Datei mit Metainformationen, zwei für Dateien mit Nutzdaten und einen für eine Datei mit Differenzen. Quote Zum Durchsuchen zählt auch das Durchsuchen mit Hilfe von Indizes. Ein Dateisystem stellt bereits einen hierarchischen Index in Form des Zugriffes über Dateipfade zur Verfügung. Da man für ein Versionskontrollsystem primär genau so einen Index auf die Revisionsidentifikation und darunter auf die Namen der versionierten Dateien braucht, finde ich es nicht sehr sinnvoll, die eingebaute Unterstützung des Dateisystemes zu umgehen und selbst nachzubilden. Speichert man in einer großen Binärdatei auch so einen Index, ist das sicherlich nicht weniger performant als der "direkte" Zugriff über das Dateisystem, aber es ist definitiv umständlicher zu implementieren und ich vertrete eben den Standpunkt, dass es keinen Sinn ergibt so einen Umstand zu machen, wenn die Funktionalität doch bereits vorhanden ist. Quote Zum einen finde ich den Vorteil der leichten Implementation nicht zu vernachlässigen, weil damit auch eine Quelle von Bugs ausgeschlossen wird. Zum anderen solltest Du vielleicht nochmal bedenken, dass so ein hochauflösender Rasterbilddatensatz der Erdoberfläche leicht in der Größenordnung einiger hundert Gigabyte liegen kann, und ein Programm wie Marble auch damit noch klarkommen muss (und kann). Quote Es ist mir persönlich eben nicht egal, wenn ein Programm umständlicher arbeitet, als es sein müsste. Zum einen vergrößert es meinen Arbeitsaufwand, wenn ich den Code des Programmes lesen will, was ich fast immer irgendwann tue, meistens schon im Rahmen der Testphase um zu beurteilen, ob ich das Programm wirklich benutzen will. Zum anderen finden sich in umständlichem Code tendenziell mehr versteckte Fehler. Quote Aber ein Beispiel. In diesem Falle ein Gegenbeispiel zu Deiner Behauptung, niemand käme auf die Idee, so abzuspeichern. Quote Das ist zwar eine mehr philosophische Frage, aber ich sehe das anders. Es mag sehr schwer sein für bestimmte Dinge eine geeignete gemeinsame Abstraktionsebene zu finden und nicht nur einen kleinsten gemeinsamen Nenner, aber wenn eine echte Abstraktion gefunden wird, ist diese immer eine Verbesserung gegenüber separaten Konzepten. Quote Das ist keine Abstraktion, sondern Überladung. Quote Das mag für die Funktion irrelevant sein, für den Programmierer ist aber auch die Form interessant. Ich bin durchaus der Meinung, dass man in einer Sprache mit einer für den eigenen Geschmack angenehmeren Syntax besser programmieren kann. Quote Ich sagte nur, wir sollten aufhören zu diskutieren, falls uns nur noch dumme Sprüche und kein Inhalt mehr einfielen. Damit wollte ich nicht behaupten, dass Du nichts sinnvolles von Dir geben würdest, sondern etwas plakativ davor warnen, dass die Diskussion zu sehr entgleitet. Quote Genereller: Eeil Git ohne guten Grund eine einzige Datei als Container verwendet, und damit alles mögliche komplizierter macht. Quote Genereller: Weil ich persönlich die gesamte Dokumentation unübersichtlich finde, unter anderem aufgrund der Aufteilung, die mir nicht zusagt. Hier gebe ich aber sofort zu, dass das eine reine Geschmacksfrage ist. Quote Das ist eine Konsequenz aus dem ersten Punkt, ja. Quote An der Aufteilung in High- und Low-Level-Befehle an sich finde ich nichts auszusetzen. Eher an der schieren Menge. Da fehlen mir auch ein paar clevere Abstraktionen ;-) Quote Die Komplexität des Interfaces hängt in der Tat nicht direkt mit dem Design des Backends zusammen. Ich habe halt das unangenehme Bauchgefühl, dass Git generell die Philosophie verfolgt, alles so kompliziert wie möglich zu machen ;-) Und wie ein Backend funktioniert ist mir auch als Nutzer noch nie egal gewesen, ich akzeptiere aber auch, wenn sich jemand gar nicht darum kümmern will. Quote Das ist in der Tat nicht kompliziert, es erscheint mir nur so überflüssig. Quote Mindestens gefühlt hat Git dreimal soviele Befehle wie alle anderen jemals erfundenen Versionskontrollsysteme zusammen ;-) Das liegt aber sicher auch an meiner Abneigung gegen die Dokumentation. Quote Nichts, was ich bisher schon erwähnt hätte und weitere Gründe erwähne ich jetzt lieber nicht, damit wir diese Diskussion mal beenden können ;-) When C++ is your hammer, every problem looks like your thumb.
|