Welches Versionskontrollsystem kann alle Aspekte verwalten? [geschlossen]

17

Vor ein paar Monaten habe ich mich mit Subversion und GIT beschäftigt und war enttäuscht. Sie behandeln SOURCE CODE gut, aber nicht andere Aspekte. Beispielsweise muss eine Website unter Versionskontrolle den Besitz von Dateien / Verzeichnissen, Lese- und Schreibzugriff auf Dateien / Verzeichnisse, Zugriffssteuerungslisten, Zeitstempel und Datenbankinhalte verwalten. und externe Links. Gibt es ein Versionskontrollsystem, das eine Rückgängigmachung genauso perfekt machen kann wie das Neuladen von einem Monat alten Backup?

Andy Canfield
quelle
12
Sieht es so aus, als wollten Sie stattdessen ein Backup-System?
Macke
2
Haben Sie darüber nachgedacht, Ihre Website unter OS X auf einem Mac auszuführen? Time Machine ist möglicherweise die einfachste derzeit verfügbare Backup-Lösung und macht es sehr einfach, bei Bedarf ein Rollback durchzuführen.
1
Wenn Sie ernsthaft an dem Thema interessiert sind, sollten Sie sich mit der Versionsverwaltung von Dateisystemen und der Versionsverwaltung von Datenbanken befassen, die über Versionsverwaltungssysteme für Quellcode hinausgehen.
Jakob
Was ist falsch daran, ein bisschen Scripting zu schreiben, um solche Dinge zu handhaben, die der SCM nicht handhabt? Auf diese Weise erhalten Sie, was Sie wollen, UND Sie erhalten es unter Versionskontrolle.
Newtopian

Antworten:

44

Sie sind verwirrt über die Rolle eines Versionskontrollsystems. Es ist nicht und war nie als Backup-System für eine laufende Website gedacht. Statische Inhalte lassen sich hervorragend verwalten, sodass sie kontrolliert in die Produktion gelangen. Mit der richtigen Verwendung von Tags und automatisierten Prüfungen können auch schnell wechselnde Websites in einem Versionskontrollsystem aufbewahrt werden.

Ein Versionskontrollsystem kann Ihnen mitteilen, wie Sie von der Site im letzten Monat bis heute (zumindest für Komponenten, die der Versionskontrolle unterliegen) gekommen sind. Es sollte alles enthalten, was Sie zum Neuerstellen der Website benötigen (ausgenommen dynamischer Inhalte). Wie bereits erwähnt, sollten alle Änderungen an Berechtigungen und Eigentümern per Skript erfolgen und dieses Skript in die Versionskontrolle einbezogen werden.

Zugriffsberechtigungen für Websites sind normalerweise recht einfach. (Grundsätzlich müssen Sie sicherstellen, dass der Webserver den gesamten Inhalt lesen und nur sehr wenig davon schreiben kann.) Mit Ausnahme des Verzeichnisbesitzes der wenigen Verzeichnisse, die von der Subversion des Webservers und möglicherweise von git beschrieben werden müssen, kann dies mit Sicherheit der Fall sein mit Berechtigungen umgehen. Verzeichnisse, die vom Webserver beschreibbar sind, enthalten normalerweise dynamischen Inhalt (der von der Website erstellt und aktualisiert wird), der getrennt von der Website-Quelle verwaltet wird.

Wenn ich gebeten würde, mit einer Website mit komplizierten Berechtigungen und Zugriffssteuerungslisten auf Ihrer Website zu arbeiten, hätte ich ernsthafte Bedenken hinsichtlich des zur Verwaltung der Website verwendeten Prozesses. Ein Versionskontrollsystem zu implementieren und die ACLs darauf zu verschieben, wäre eine der Lösungen, die ich ernsthaft in Betracht ziehen würde.

Dynamische Inhalte wie Blogeinträge oder Kommentare befinden sich normalerweise in einer Datenbank oder einem anderen Datenspeicher und nicht in der Versionskontrolle, mit der die Site erstellt wurde. Der Datenspeicher kann so eingerichtet sein, dass er eine Versionskontrolle seines Inhalts bietet (wie diese Software). Viele Wikis verwenden ein Versionskontrollsystem, um Revisionen zu verfolgen.

BEARBEITEN:

Das Update, das ich verwende, ist (a) überhaupt keine Versionskontrolle, (b) die Produktionssite ist die Master-Site, (c) jedes Mal archivieren, wenn sich etwas ändert, (d) das Archivierungsskript entfernt Junk wie ACL und (e) Das Installationsskript behebt andere Junk-Rechte wie Dateiberechtigungen.

Diese Probleme können behoben werden, indem Sie die Site in ein Versionskontrollsystem importieren und Ihren Prozess so ändern, dass die Master-Site über dieses System aktualisiert wird. (a), (b) und (c) werden direkt von der Versionskontrolle behandelt. Möglicherweise möchten Sie Releases mit Tags versehen, damit (c) besser funktioniert. (d) Im Allgemeinen ist dies kein Problem, wenn nur das Bereitstellungssystem Ihren Standort ändert. Ich habe noch nie ACLs für den Site-Inhalt benötigt.

(e) sollte nur bei der ersten Erstellung und größeren Änderungen ausgeführt werden müssen. Es kann auch das Skript enthalten, das die Site über die Versionskontrolle aktualisiert und häufig ausgeführt wird. Diese Skripte sind in der Regel recht einfach, wenn Sie Ihre Site in einem Versionskontrollsystem halten.

Aber warum hat niemand ein allgemeines System dafür gebaut?

Weil es nicht benötigt wird, wenn Sie ein Versionskontrollsystem verwenden.

Ein Versionskontrollsystem KANN all diese Dinge nachverfolgen, aber keines tut es.

Sowohl CVS als auch Subversion verfolgen, was Sie nachverfolgen müssen, wenn Sie sie verwenden. Sie können nicht nachverfolgen, was Sie nachverfolgen müssen, da Sie kein Versionskontrollsystem verwenden, und sie sollten auch nicht. Sie erfassen, was Sie erfassen müssen, wenn Sie ein Versionskontrollsystem verwenden.

Ich habe mit mehreren Websites gearbeitet, deren Inhalt mithilfe der Versionskontrolle verwaltet wurde. Alle hatten unterschiedliche Anforderungen an die Bereitstellung von Websites, die Bereitstellungshäufigkeit und die Vollständigkeit der Updates. Sobald die Sites in der Versionskontrolle waren, waren die restlichen Anforderungen relativ einfach zu erfüllen. Die Dokumentation für CVS und Subversion enthält Vorschläge für mögliche Aktualisierungsmethoden.

Möglicherweise benötigen Sie ACLs, um den Zugriff auf bestimmte Bereiche innerhalb des versionskontrollierten Inhalts zu beschränken. Ich arbeite jedoch eher vertrauensvoll. Die Versionskontrolle macht es einfach zu sehen, wer was wann getan hat. Wenn Sie Dateien nicht neu formatieren, können Sie auf einfache Weise einen kommentierten Verlauf einer Datei abrufen, aus dem hervorgeht, wer wann welche Zeilen hinzugefügt hat.

BillThor
quelle
+1 für konkretisierende Gründe, warum die Frage von Anfang an falsch ist.
Macke
2
+1 Trotzdem ist es gut, dass die Frage gestellt wurde, damit andere von Ihrer Antwort profitieren können.
Oliver-Clare
Ein Versionskontrollsystem soll mir die Möglichkeit geben zu sagen "OK, auf diesem anderen Computer hier baue ich die Site ab dem 28. Juli." Die Versionskontrolle ist effizienter als Backups, da sie Änderungen verfolgt. Andernfalls würde ein tägliches Backup den Job in Ordnung bringen.
Andy Canfield
Ja, das Update, das ich verwende, ist (a) überhaupt keine Versionskontrolle, (b) der Produktionsstandort ist der Master-Standort, (c) jedes Mal archivieren, wenn sich etwas ändert, (d) das Archivierungsskript entfernt Junk wie ACL und ( e) Das Installationsskript behebt andere Junk-Rechte wie Dateiberechtigungen. Aber warum hat niemand ein allgemeines System dafür gebaut? Ein Versionskontrollsystem KANN all diese Dinge nachverfolgen, aber keines tut es.
Andy Canfield
+1: Tolle Antwort. Ich möchte jedoch hinzufügen, dass kein Versionskontrollsystem dieses Zeug verfolgt, weil es NICHT KÖNNTE. Die Berechtigungen und Benutzernamen sind hostspezifisch und ihr Format ist systemspezifisch. Das Tool kann sie auf keinen Fall automatisch auf einen anderen Host portieren, insbesondere wenn es sich um ein anderes Betriebssystem handelt.
Jan Hudec
10

Alle und keiner von ihnen.

Es ist eine schlechte Idee, die Quellcodeverwaltung zu beauftragen, um diese Details direkt zu verwalten, wie es Ihre Frage nahelegt.

Sie können jedoch ein Bash-Skript (* nix) oder ein Powershell-Skript (Windows) schreiben, mit dem einige oder alle dieser Ziele erreicht werden. Dieses Skript könnte in der Quellcodeverwaltung gespeichert werden.

Dann können Sie dieses Skript zu einem Ihrer Build-Artefakte machen und es als Teil Ihrer Bereitstellung ausführen.

pdr
quelle
Dies. Die Idee, überhaupt Quellen zu haben, ist, dass Sie sie aus Ihrem VCS ziehen und sie verwenden können, um das fertige Produkt zu erstellen.
Blrfl
2

IMHO ein Versionskontrollsystem an sich ist nicht dafür vorgesehen, auf diese Weise verwendet zu werden.

Aber ich neige dazu, sicherzustellen, dass Sie eine Version aus der Quellcodeverwaltung erhalten können. Sie müssen nur eine Build-Datei / Powershell-Datei ausführen und alles läuft wieder.

Dafür müssen Sie:

  • Alle Bibliotheken, auf die Sie zugreifen, hängen von der Quellcodeverwaltung ab
  • Eine Build-Datei, die Ihre Umgebung festlegt
  • eine Anleitung zu den Anforderungen Ihrer Umgebung (Sie möchten keine SQL Server-Installation in Ihre Quellcodeverwaltung einfügen)
KeesDijk
quelle
1

Ich glaube, Sie brauchen in Ihrem Fall ein Konfigurationsmanagement- Tool. Die, die ich benutzt habe, ist Marionette .

Ich zitiere Sie:

Datei- / Verzeichnisbesitz verwalten, Lese- und Schreibzugriff auf Datei / Verzeichnis,

Ich habe das mit einer Zeile getan (sicherstellen, dass Benutzer vorhanden ist, sicherstellen, dass Verzeichnis vorhanden ist, usw.) ...

Zugriffskontrolllisten,

Wenn dies Windows-ACLs sind, gibt es spezielle CM-Tools für Windows ...

Zeitstempel,

Auch hier könnte der Touch- Unix-Befehl in einer Zeile eines Puppet-Skripts dies für Sie tun.

Datenbankinhalte.

Das ist in vielen Frameworks eingebaut, ein Cronjob, der sicherstellt, dass alles anders ist?

und externe Links.

Weiß nichts darüber.

Natürlich möchten Sie Ihren Configuration Management-Code nach dem Schreiben möglicherweise auf einem Versionskontrollsystem ablegen (oder in den beteiligten Systemen abrufen). Davon kommst du nicht weg :-).

Dimitrios Mistriotis
quelle
Ich verstehe nicht, was Sie mit "Zeitstempeln" meinen - wieder könnte ein Unix-Befehl in einer Zeile in einem Puppenskript dies tun. Um die Site-Version zu erhalten, wird auf meiner Site der gesamte Sitebaum gescannt und das Datum und die Uhrzeit der neuesten Datei zurückgegeben. Ich möchte, dass meine Versionskontrolle "Checkout" den Dateien den gleichen Zeitstempel gibt, den sie beim Einchecken hatten, und nicht "jetzt". Wie macht man das mit einem Unix-Befehl?
Andy Canfield
Natürlich suchen Sie nach "touch", überprüfen Sie dies: en.wikipedia.org/wiki/Touch_(Unix) . Im Allgemeinen wird beim Auschecken die aktuelle Zeit angewendet. Wenn Sie jedoch aus irgendeinem Grund einen anderen Zeitstempel möchten, gehen Sie wie folgt vor.
Dimitrios Mistriotis
Mir hat das Grundprinzip Ihrer Frage gefallen. Sie möchten so weit wie möglich automatisieren, was der "richtige Weg" ist. Sie benötigen ein gewisses Know-how darüber, wie dies zu tun ist und was zu VControl gehört und was nicht. Ich wünschte, mehr Leute aus
unserer
0

Es gibt ein ultimatives Versionskontrollsystem, das alle Aspekte aller digitalen Dokumente verwaltet. Es heißt Xanadu und wurde 1960 von Theodor Holm Nelson erstellt , noch bevor Dinge wie Dateisysteme üblich waren. Theoretisch ist also alles perfekt gelöst. In der Praxis wurde Xanadu nie wie von Nelson vorgesehen implementiert, aber es inspirierte viele spezialisiertere Systeme, einschließlich der Web- und Versionskontrollsysteme. Nelsons Werke sind immer noch eine neue Lektüre wert - und sie könnten die Frage beantworten, warum es kein allgemeines VCS gibt, das alle Aspekte verwaltet.

Jakob
quelle