Was sind die Vorteile von Versionskontrollsystemen, die jede Datei separat versionieren?


15

In den letzten Jahren habe ich mit verschiedenen Versionskontrollsystemen gearbeitet. Für mich war einer der grundlegenden Unterschiede zwischen ihnen, ob sie Dateien einzeln versionieren (jede Datei hat eine eigene Versionsnummer und einen eigenen Verlauf) oder das Repository als Ganzes (ein "Commit" oder eine Version stellt eine Momentaufnahme des gesamten Repository dar). .

Einige "Per-File" -Versionskontrollsysteme:

  • CVS
  • Klarer Fall
  • Visual SourceSafe

Einige Versionskontrollsysteme für das gesamte Repository:

  • SVN
  • Git
  • Mercurial

Meiner Erfahrung nach haben die Versionskontrollsysteme pro Datei nur zu Problemen geführt und erfordern viel mehr Konfiguration und Wartung, um sie korrekt zu verwenden (z. B. "Konfigurationsspezifikationen" in ClearCase). Ich hatte viele Fälle, in denen ein Mitarbeiter eine nicht zusammenhängende Datei änderte und eine idealerweise isolierte Entwicklungslinie durchbrach.

Was sind die Vorteile dieser Dateiversionskontrollsysteme? Welche Probleme haben Versionskontrollsysteme mit "gesamtem Repository", die Dateiversionskontrollsysteme nicht haben?


3
Ich denke, es war hauptsächlich nur historisch so und wir gehen jetzt weg von dateiorientierten zu change-set-orientierten Systemen, aber aus heutiger Sicht ist es schwer zu verstehen, warum die Leute sogar den Per-File-Ansatz ausprobiert haben. Hervorragende Frage!
Blubb

Entschuldigung, wenn diese Frage als argumentativ herauskommt. Es ist ein Produkt der jüngsten Frustration.
Mike Daniels

1
@Mike Daniels: Das tut es (zumindest für mich) nicht, da du eindeutig nach den Vorteilen fragst.
Blubb

Diese beiden Standpunkte sind nur unterschiedliche Konventionen. Jedes Argument zugunsten eines über dem anderen wirft nur Gegenargumente von Partisanen der anderen Seite auf. Wenn Sie beispielsweise in Clearcase ein Verhalten für alle Wiederholungen wünschen, können Sie die Konfigurationsspezifikation nach Datum anpassen.
mouviciel

SVN hat eine Version pro Datei, oder hat sich das auch in der letzten Version geändert?
Fordern Sie den

Antworten:


12

Meiner Erfahrung nach gibt es keine: "Gesamtes Repository" VCS dominiert strikt das "Pro-Datei" -VCS.


3

Pro Datei ist von Vorteil, wenn Sie Produktlinien (mehrere Softwareprodukte) aus demselben Repository erstellen.

In einigen Vertragsumgebungen von Kunden ist der Nachweis erforderlich, dass in ihrem Code-Drop NUR die gewünschten Änderungen enthalten sind, nicht jedoch andere Änderungen. Dies ist ziemlich einfach, wenn die Dateiversionsnummern immer noch alle gleich sind.

Und dies ist kein zufälliges Beispiel, das ich aus der Luft gezogen habe.

Dies geschah, als ich das letzte Mal Softwareaktualisierungen für ein System an die US-Armee verschickte, das sie in großen Mengen von meinem früheren Arbeitgeber gekauft hatten. Der Dollarwert der Verträge wurde in Bruchteilen von Milliarden Dollar gemessen (damals, als US-Dollar viel mehr wert waren).

Also hilft es manchmal.

Seltsamerweise: Wo ich jetzt arbeite, versenden wir jeden Kunden auch mit einem anderen Liefergegenstand. (Und das habe ich nicht entschieden, falls Sie sich fragen.)

Ich vermute, dass es im Verteidigungs- / Luftfahrtbereich weitaus häufiger vorkommt als in Shrink-Wrap- oder Web-Apps.


3
Ein Zweig des gesamten Datei-Repositorys würde jedoch auch die gleichen Anforderungen erfüllen. Beispielsweise sind in bzr Zweige bis zu Ihrer Zusammenführung (oder Freigabe eines Repositorys) vollständig unabhängig von der Hauptlinie.
edA-qa mort-ora-y

1
Ich kann mir keine einzige Situation vorstellen, in der ein Zweig in einem System mit einem vollständigen Repository den erforderlichen Status nicht besser ausdrücken würde, als sich auf einen Status außerhalb des VCS zu verlassen, um zu bestimmen, welche Dateien in einem VCS "pro Datei" verwendet werden sollen. Mein erster Job nach uni war RCS, eine Reihe von Skripten zur Versionierung des Projekts und ein Skript der obersten Ebene zur Versionierung der Versionsskripten - ein absoluter Albtraum, und ja, das war auch für ein Militärprojekt. * 8 ')
Mark Booth

@ Mark Booth, der Kunde wusste, welche Dateien aufgrund der gewünschten Korrekturen geändert wurden. Die Prüfung der physischen Konfiguration erfolgte also nach Versionskontrollnummer
Tim Williscroft,

Was ich sagen will ist , dass eine Version + einen geprüften Patch erfordert unterschiedliche Informationen in verschiedenen Orten, den VCS und die Revisionsstelle. Bei einer Verzweigung im System 'Gesamtes Repository' werden diese beiden Zustände als separate Einheiten erfasst. Jetzt werden dieselben Informationen zwischen dem VCS und dem Auditsystem dupliziert und sollten immer übereinstimmen. gitSie können sogar zwischen Autor und Committer unterscheiden, sodass Sie ein "geprüftes" Repository führen können, in dem Sie sowohl wissen, wer den Patch erstellt hat (der Autor) als auch wer ihn geprüft hat (der Committer). Geben Sie uns eine beispielhafte Situation und ich werde meine -1 umkehren.
Mark Booth

@Mark Stand welche Patches? Sie wussten, dass ihre Software dieser Satz von Dateien ist. A 1.01 B 1.05 D 1.55 E 1.44 F 1.01 und die SVD für die von ihnen akzeptierte Version enthielten Datei-für-Datei-Änderungsinformationen, z. B. E geändert, um den Fehler 1104, alte Version 1.43, neue Version 1.44, zu beheben . Himmel hilf uns, wenn wir F von Version 1.01 geändert hätten. Die Situation war noch komplizierter, da es tatsächlich Fehler gab, für die sie keine Änderungen wollten. Diese Leute wollten die minimalen Änderungen, um nur einige der Merkmale aufzunehmen, die aus einem Jahr der Entwicklung stammen. Auswahl von Post-Hoc-Bugfixes.
Tim Williscroft

3

Die Dateiversionierung bietet keinerlei Vorteile.

Die Nachteile hingegen sind zahlreich und offenkundig.


0

Ich könnte sagen, dass die "Per-File" -Versionskontrollsysteme außer der Implementierung des VCS keine klaren Vorteile haben. Die VCS-Codierer würden gerne codieren, wenn es sich um eine "Pro-Datei" -Version handelte. Ich stimme dem Punkt zu, dass es historisch aufgetaucht ist.


0

Wenn Sie über verwandte Dateien verfügen, bietet der Ansatz pro Datei keinen Vorteil. Welches ist der häufigste Fall in einer Entwicklungseinstellungen.

In einigen besonderen Fällen - / etc oder. Dateien in Ihrem Home-Verzeichnis in Unix sind die einzigen, über die ich routinemäßig verfüge - Sie bearbeiten (meistens) nicht verwandte Dateien. Und dann kann es ein Ärgernis sein, ein System zu haben, das darauf besteht, nicht in Beziehung stehende Änderungen synchron zu halten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.