Versionsverwaltung

Die Verwaltung von Versionen (auf Englisch  : Versionskontrolle oder Revisionskontrolle ) besteht in der Verwaltung aller Versionen einer oder mehrerer Dateien (im Allgemeinen in Textform ). Es wird hauptsächlich im Bereich der Softwareerstellung verwendet und betrifft hauptsächlich die Verwaltung von Quellcodes .

Da diese Aktivität langwierig und relativ komplex ist, ist Software-Support fast unabdingbar. Zu diesem Zweck gibt es verschiedene Versionsverwaltungssoftware, die, obwohl sie gemeinsame Konzepte haben, jeweils ihr eigenes Vokabular und ihre eigenen Verwendungszwecke mitbringen. Zum Beispiel gibt es eine rudimentäre Versionierung Mechanismus in Wikipedia  : für jeden Artikel, die Geschichte wird durch Klicken auf die verfügbaren Verlauf anzeigen Link  ; Jede Zeile ist eine Version des Artikels. Ein solches System ist im Gegensatz zu einer aufwändigeren Inhaltsverwaltung gemäß einer Baumstruktur linear.

Versionen

Während sich die Software weiterentwickelt, wird jede Stufe des Fortschritts als Version (oder Revision ) bezeichnet. Die verschiedenen Versionen sind notwendigerweise durch Änderungen ( Diff oder Patch ) verknüpft : Eine Änderung besteht aus einer Reihe von Hinzufügungen, Änderungen und Löschungen von Daten.

Schematisch werden wir von Version N zu Version N + 1 wechseln, indem wir eine Modifikation M anwenden. Die Versionsverwaltungssoftware wendet diese Modifikationen einzeln an oder entfernt sie, um die gewünschte Version der Datei bereitzustellen.

Der Begriff "Revision" wird manchmal bevorzugt, um die Version einer Datei und die Version einer Software , die eine Verteilungsstufe in "endlicher" Form darstellt, dh hauptsächlich binär, nicht zu verwechseln .

Änderungen und Änderungssätze

Eine Modifikation stellt daher die Entwicklung zwischen zwei Versionen dar. Wir können daher sowohl vom Unterschied zwischen zwei Versionen als auch von Änderungen sprechen, die zu einer neuen Version führen.

Normalerweise verwenden wir die Versionierung für eine Reihe von Dateien, aus denen ein Projekt besteht. Infolgedessen spricht man häufig von Änderungen für eine einzelne Datei und von einem Änderungssatz, wenn es um das Projekt (und damit um mehrere Dateien) geht. In der Tat entwickeln sich die beiden nicht mit der gleichen Geschwindigkeit.

Nehmen wir zur Veranschaulichung das Beispiel einer Software namens "Toto". Es besteht aus den Dateien A, B und C. Version 1.0 von "Toto" entspricht den Versionen 1.0 jeder der Dateien. Lassen Sie uns zugeben, dass das Hinzufügen einer Funktionalität zu "Toto" die Modifikation von A und C erfordert. Lassen Sie uns die Situation mit Hilfe einer Tabelle darstellen

Versionen von "Toto" Versionen von A. Versionen von B. Versionen von C.
1.0 1.0 1.0 1.0
1.1 1.1 1.1

Aus Projektsicht sind die Änderungen an A und C Teil desselben Pakets.

Kaution und lokale Kopien

Die auf diese Weise versionierten Dateien werden in einem Repository verfügbar gemacht , dh in einem Speicherplatz, der von der Versionsverwaltungssoftware verwaltet wird .

Um Änderungen vornehmen zu können, muss der Entwickler zunächst eine lokale Kopie der Dateien erstellen, die er ändern möchte, oder des gesamten Repositorys. Abhängig von den Versionskontrollsystemen können einige Dateien für alle oder für bestimmte Personen gesperrt oder schreibgeschützt sein.

Der Entwickler nimmt seine Änderungen vor und führt seine ersten Tests lokal durch, unabhängig von den Änderungen, die aufgrund der gleichzeitigen Arbeit anderer Entwickler am Repository vorgenommen wurden. Er muss dann ein Commit (eine "Übermittlung") vornehmen, dh seine Änderungen übermitteln, damit sie im Repository gespeichert werden. Hier können Konflikte zwischen dem, was der Entwickler einreichen möchte, und den Änderungen auftreten, die seit der letzten lokalen Kopie vorgenommen wurden. Diese Konflikte müssen gelöst ( zusammengeführt ) werden, damit der Patch im Repository akzeptiert wird.

Geäst

Wenn abweichende Änderungen ohne Konflikte auftreten, werden Zweige erstellt . Die Tatsache, zwei Zweige zusammenbringen zu wollen, ist eine Verschmelzung von Zweigen.

Zweige werden verwendet, um Folgendes zu ermöglichen:

Die Korrekturen der letzten Version müssen am Kofferraum vorgenommen werden .

Änderungskonflikt

Bei der Teamentwicklung, insbesondere wenn sie über die ganze Welt verteilt sind, muss eine gemeinsame Arbeitsbasis geteilt werden, und dies ist der springende Punkt bei Versionsverwaltungssystemen. Es muss jedoch auch sichergestellt werden, dass die Entwicklungsteams mithilfe von Kommunikationstools, Problemverfolgungssoftware , Dokumentationsgenerator und / oder Projektmanagementsoftware koordiniert werden .

Es ist nicht ungewöhnlich, dass einige Änderungen widersprüchlich sind (z. B. wenn zwei Personen unterschiedliche Änderungen an demselben Teil einer Datei vorgenommen haben). Dies wird als Änderungskonflikt bezeichnet, da die Versionsverwaltungssoftware nicht wissen kann, welche der beiden Änderungen angewendet werden soll.

Die Wettbewerbskontrolle  (in) , um solche Änderungskonflikte zu vermeiden, ist ein klassisches Problem in der Informatik: Sie findet sich beispielsweise in der Datenbank von Managementsystemen oder in der Systemprogrammierung . Es kann auf zwei verschiedene Arten gehandhabt werden, die beide auf die Versionierung angewendet wurden:

Zentralisierte und dezentralisierte Systeme

Zentralisierte Versionsverwaltung

Bei zentraler Versionierungssoftware wie CVS und Subversion (SVN) gibt es nur ein Versionsrepository, auf das verwiesen wird.

Dies vereinfacht die Versionsverwaltung, ist jedoch für bestimmte Verwendungszwecke einschränkend, z. B. für das Arbeiten ohne Verbindung zum Netzwerk oder ganz einfach für die Arbeit an experimentellen oder umstrittenen Zweigen.

Dezentrale Versionsverwaltung

Die dezentrale Versionsverwaltung besteht darin, das Versionsverwaltungstool als ein Tool zu betrachten, mit dem jeder in seinem eigenen Tempo arbeiten kann, nicht synchron mit anderen, und diesen Entwicklern dann die Möglichkeit bietet, ihre jeweilige Arbeit auszutauschen. Tatsächlich gibt es mehrere Repositorys für dieselbe Software. Dieses System wird häufig von freier Software verwendet .

Beispielsweise sind GNU Arch , Git und Mercurial dezentrale Versionsverwaltungssoftware.

Vorteile der dezentralen Verwaltung:

Nachteile:

Der Autor für Softwareentwicklung, Joel Spolsky, beschreibt das dezentrale Versionsmanagement als „möglicherweise den größten Fortschritt bei Softwareentwicklungstechnologien in den [letzten] 10 Jahren. ".

Besondere Merkmale

Beschriftung oder Kennzeichnung

Dies besteht darin, einer bestimmten Version einen Namen zuzuordnen. Für einige Versionierungstools (wie CVS ), die Versionen mit geringer Granularität verwalten (viele unbedeutende Änderungen), ist dies eine Möglichkeit, auf einfache Weise eine aussagekräftige Version zu finden.

Sperren und Benachrichtigungen

Für die Teamarbeit bieten einige Versionsverwaltungssoftware Tools für die Kommunikation.

Beispielsweise wird das Sperren verwendet, um das Ändern einer Datei zu verhindern, während die Benachrichtigung eine Warnung an alle anderen Mitglieder ausgibt, wenn eine Datei geändert wird.

Revisionsvorschlag

Der Revisionsvorschlag (PR) ist die Aktion, bei der der Eigentümer des Referenz-Repositorys aufgefordert wird, die Änderungen zu berücksichtigen, die Sie an Ihrem Fork- Repository oder lokalen Repository vorgenommen haben, die Sie für das Referenz-Repository freigeben möchten.

Beispiele für Versionskontrollsoftware

Versionskontrollsoftware ist reichlich vorhanden. Unter UNIX gab es SCCS, aus dem eine weitere freie Software hervorging  : GNU RCS, die de facto zum Standard wurde. CVS , das Dateibäume besser verwaltet als RCS, ist in der Welt der freien Software und in Unternehmen aufgrund seiner Einfachheit äußerst beliebt geworden .

Sie wurden nach und nach durch modernere Alternativen wie Subversion und dann Git ersetzt , die heute häufiger verwendet werden als ihre Vorgänger. Andere Software wie Bazaar oder Mercurial sind Alternativen zu Git, die über eine beträchtliche Benutzerbasis verfügen.

In der proprietären Welt, ClearCase und Synergy (von IBM ), sind Serena Dimensions am häufigsten . Es gibt auch Visual Source Safe und Team Foundation Server (von Microsoft ), die in Visual Studio integriert sind . Es gibt auch AlienBrain , das in der Welt der Videospiele häufig verwendet wird, da es sich besonders für die Verwaltung von Grafik- und Soundressourcen eignet. Die WinDev AGL (von PCSoft ) verwendet eine eigene Versionsverwaltungsimplementierung.

Siehe auch

Zum Thema passende Artikel

Verweise

  1. http://msdn.microsoft.com/fr-fr/library/ms189132.aspx
  2. http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-basics-versioning.html
  3. (in) Joel Spolsky , "Die  verteilte Versionskontrolle ist da, um zu bleiben, Baby  " über Joel on Software ,17. März 2010(abgerufen am 30. Juni 2011 )
  4. „  Ergebnisse der Eclipse Community Survey 2014  “ über Ian Skerrett ,23. Juni 2014(abgerufen am 29. August 2016 )