Übergang zur Quellcodeverwaltung

10

Wir sind ein ziemlich kleines Unternehmen (3-4 Programmierer und 3-4 Site-Designer), das eine PHP-Web-App für einen bestimmten Zweck entwickelt, die die Funktionalität für mehr als 100 Websites bereitstellt. Wir arbeiten seit ein paar Jahren in einer separaten Entwicklungs- und Produktionsumgebung, die ziemlich gut funktioniert hat. Es gab immer genug separate Funktionen, die entwickelt werden konnten, damit die Programmierer nie wirklich in Konflikt geraten, und es war bequemer, ohne die Quellcodeverwaltung zu arbeiten. obwohl das Risiko eines Datenverlusts bestand und unser Anteil an Dateien bei einem versehentlichen Umzug verloren ging.

Die andere Überlegung ist, dass unsere Designer nicht technisch versiert sind (ich habe ihnen das HTML-Markup vorgestellt, anstatt WYSIWYGs zu verwenden). Dies war einer der Gründe, zu zögern, auf die Versionierung umzusteigen.

Jetzt, da wir mehr als 100 Standorte erreicht haben und das Entwicklungsteam wächst, versuche ich, unsere Verfahren zu standardisieren, und die Quellcodeverwaltung scheint für Programmierer ein logischer Schritt zu sein. Ich hoffe, dass dies auch unsere Patch-Bereitstellungen beschleunigt.

Leider habe ich nur sehr begrenzte Erfahrung mit der Einrichtung eines Versionsverwaltungssystems. Was ich neugierig bin, von Leuten mit einem ähnlichen Setup zu hören oder Erfahrungen mit dem Wechsel zu machen:

1) Versieren Sie alles (Websites, CSS, HTML-Vorlagen und App-Code) und zwingen Sie die Designer, die Versionierung zu lernen? Oder arbeiten nur die Entwickler am Anwendungscode?

2) Worauf sollten Sie beim erstmaligen Einrichten der Quellcodeverwaltung achten?

3) Bereitstellung von dev => Produktionstipps für die Quellcodeverwaltung.

Vielen Dank für alle Einblicke.

Edit 1: Dang. Bisher empfiehlt jeder, alles zu kontrollieren. Das wird mich früh meine Haare verlieren lassen. Es wird wahrscheinlich in naher Zukunft eine neue Frage aufwerfen. Vielen Dank für den Rat bisher, weiter so!

Edit 2: Viele gute Antworten, und wir werden uns die verschiedenen Versionskontrollsysteme ansehen. Vielen Dank für die Antworten an alle!

DTest
quelle
@ Mattdm ahh, 'Versionskontrolle' ... ich habe versucht 'Quellcodeverwaltung' / Seufzer
DTest
Auch "Revisionskontrolle".
Mattdm
Adobe und die meisten anderen größeren Entwickler von Grafiksoftware haben bereits eigene Implementierungen der Versionskontrolle von Assets - was darauf hinweist, dass dies für Designer imho sogar noch wünschenswerter sein sollte (und ja, das umfasst die Versionierung von Assets und nicht nur Textdeskriptordateien).
Oskar Duveborn

Antworten:

10

Es ist hilfreich, alles versioniert zu haben, auch für Designer. Und wenn sie mit gutem Training gut umgesetzt werden, werden sie es meiner Meinung nach eher hilfreich als lästig finden.

Wenn Sie gerade erst anfangen, würde ich dringend empfehlen, ein verteiltes Versionskontrollsystem wie git oder mercurial zu verwenden . Dies ist der allgemeine Trend in der Welt, und es gibt viele Vorteile. Es ist einfach, in einem getrennten Modus zu arbeiten, ohne Netzwerkabhängigkeit und mit der Möglichkeit, private, unpolierte Arbeiten auszuführen, die noch unter Versionskontrolle stehen, und alles zentral einzuchecken, wenn es fertig ist.

Und nicht um auf Appelle an die Autorität oder irgendetwas zurückzugreifen, sondern um zu lesen, was Joel Spolsky zu diesem Thema zu sagen hat . (Auswahlzitat: "Subversion = Blutegel. Mercurial und Git = Antibiotika.") Unter anderem macht er den interessanten Punkt geltend, dass diese neuen Systeme ein neues mentales Modell verwenden, das sich von der herkömmlichen Versionskontrolle unterscheidet - weshalb sie in diese Art von Ansatz von Anfang an ist ein Gewinn.

mattdm
quelle
danke für die antwort, mattdm. Ich werde in diese Links
einchecken
+1 für diesen Zeiger auf den Spolsky-Artikel; Ich lese gerade sein Hg-Tutorial (HgInit) und ich glaube, ich fange zum ersten Mal an, dVCS zu bekommen. Danke (du und Joel).
MadHatter
3

Ich würde sagen, alles unter Versionskontrolle stellen. Sobald alles funktioniert, können Sie es in ein Tag kopieren, das für die meisten SCM-Systeme nicht viel Speicherplatz auf dem Server benötigt.

Was die anfänglichen Fallstricke angeht, sollten Sie sich keine großen Sorgen machen müssen. Übertragen Sie alles auf den Server. Wenn dies nicht korrekt ist, können Sie es mischen und die zusätzlichen Inhalte später löschen. Das einzige, was ich nicht festschreiben würde, sind Artefakte, die aus dem Quellcode erstellt wurden, dh Java-Codedateien gehören zur Versionskontrolle, aber nicht die kompilierten Klassen oder ganzen ISOs / DVDs von Binärdateien, die aus dem Quellcode erstellt wurden.

Die Entwicklung der Produktion ist einfach. Erstellen Sie bei jedem wichtigen Meilenstein eine Niederlassung. Das Verzeichnislayout im Versionskontrollsystem sieht normalerweise so aus:

/ Stamm / Projekt / Zweige / Projekt / Version1 / Zweige / Projekt / Version2 / Zweige / Projekt / Version3

Angenommen, Sie finden einen Fehler in Version 2 des Produkts, navigieren zu diesem Zweig, beheben ihn und veröffentlichen Version 2.1. Während Sie an dem Ordner / trunk / project für die neue Version 4 arbeiten, liegt es an Ihnen, welche Funktionen vorwärts und rückwärts zusammengeführt werden.

Lassen Sie sich nicht von den SCM-Kool-Aid-Trinkern täuschen, es gibt nur sehr wenige funktionale Unterschiede zwischen den gängigen Versionskontrollsystemen Subversion und Git. Das Wichtigste für Ihr Team ist, wie gut sich diese Server in Ihre vorhandenen Tools integrieren lassen. Ich mag WYSIWYGs auch nicht, aber es ist sicher schön, Eclipse-PHP oder andere IDEs zu haben, die mit dem Server kompatibel sind.

Vinnyjames
quelle
Oh Mann, du brauchst eine bessere Kool-Hilfe. Sie können die verteilte Versionskontrolle verwenden, um so etwas wie ein CVS- oder SVN-System zu replizieren, aber es gibt wirklich einen grundlegenden Unterschied. (Dies ist nicht auf SVN zu klopfen, was für das, was es tut, in
Ordnung ist, wohlgemerkt
3

Ich bin Entwickler und war zuvor als IT-Administrator tätig.

So beantworten Sie Ihre spezifischen Fragen:

1) Ja, Version alles.

2) Schlagen Sie vor, dass Sie ein Dummy-Versionskontroll-Repository und ein Dummy-Projekt einrichten, in denen die Benutzer lernen können.

3) Kennzeichnen Sie die Versionen, die in Produktion gehen. sogar die Versuche. Dann können Sie immer eine bestimmte Version überprüfen, die jemand ausführt.

Ich sehe, Sie haben die Frage CVS markiert.

Mein Vorschlag ist, stattdessen Subversion in Kombination mit TortoiseSVN ernsthaft zu betrachten, was die Verwendung sehr einfach macht. Es gibt auch eine TortoiseCVS.

Ich schlage vor, Sie führen ein internes Tutorial zur Versionskontrolle durch. Ich bin überrascht, wenn Ihre Entwickler / Designer dies noch nicht erlebt haben. Schildkröte macht es nur sehr benutzerfreundlich.

Es kann auch vorteilhaft sein, eine der Webschnittstellen in cvs oder subversion zu installieren.

Der Grund, warum ich Subversion über CVS vorschlage, ist, dass CVS zwar sehr gut ist, aber einige schwerwiegende Design- und Implementierungsprobleme aufweist. Die großen Probleme für mich waren: 1) Sie können keine Verzeichnisse versionieren. 2) Die Behandlung von Binärdateien ist nicht allzu gut, da viele Dinge standardmäßig Text sind. 3) Keine atomaren Commits. 4) Ich erinnere mich, dass es oft durcheinander geraten ist und Sperrdateien herumliegen, die ich manuell aus dem Codespeicher entfernen musste. Es gab Raum für Korruption, da Sie die Sperrdateien rm. 5) SSL-Unterstützung und Verwaltung von Benutzern / Passwörtern

Subversion behebt im Grunde alle diese Probleme sind wahrscheinlich viele andere. Es hat auch viele erweiterte Funktionen wie externe Funktionen (die ich tatsächlich benutze). Und es ist möglicherweise möglich, die Benutzer / Gruppen in Active Directory zu verknüpfen, was Sie möglicherweise nützlich finden. Zu der Zeit habe ich CVS verwendet, das nicht verfügbar war. Es könnte jetzt sein, ich habe nicht überprüft.

Der wahrscheinlich größte Unterschied, um sich mit svn vertraut zu machen, besteht darin, dass Sie keine Tags erstellen. Stattdessen erstellen Sie scheinbar Kopien, bei denen das Projektverzeichnis in den Ordner Tags kopiert und mit einem Namen versehen wird. Werfen Sie einen Blick in die Dokumentation und Sie werden sehen, was ich meine. Ich weiß, es sieht komisch aus, aber man gewöhnt sich daran.

Diese Website könnte von Vorteil sein (obwohl ich nicht dafür bürgen kann): Einrichten eines modularen SVN-Repositorys für PHP-Websites http://www.howtoforge.com/set-up-a-modular-svn-repository-for -php-Websites

Matt
quelle
Ja, ich habe nur als cvs getaggt, weil ich nicht das richtige Tag gefunden habe (was sich als 'Versionskontrolle' herausstellte). Ich habe in der Vergangenheit ein wenig mit svn gespielt und werde wahrscheinlich git und einige andere vorher ausprobieren eine endgültige Entscheidung treffen. Danke auch für die Vorschläge, besonders zur Dummy-Version. Dieser Link wird hilfreich sein, da ich sicher bin, dass dies eine meiner Fragen sein würde, wenn ich endlich die Versionskontrolle einrichte
DTest
3

Mit großem Respekt für einen Großteil der Weisheit, die oben auftaucht - und es ist klug -, ist die Einführung der Versionskontrolle wie die Einführung von Überwachungssystemen. Meine Kunden sagen "Was soll ich überwachen?" Und die offensichtliche Antwort lautet "Alles überwachen". Dies ist jedoch keine willkommene Neuigkeit: Sie verfügen über 350 Systeme, von denen jedes 20 bis 30 Systemvariablen sowie eine Reihe von nutzungsspezifischen Variablen enthält, und sie können alle sinnvoll überwacht werden. aber es gibt nur einen von mir, und sie möchten innerhalb von 14 Tagen einige Ergebnisse sehen.

Obwohl ich damit einverstanden bin, dass die beste Vorgehensweise darin besteht, alles zu versionieren, sollten Sie zunächst die Dinge kontrollieren, deren mangelnde Kontrolle Ihnen bisher die meisten Probleme bereitet hat , wenn dies zunächst nicht praktikabel ist .

Wenn die meisten Ausfälle durch den Anwendungscode verursacht werden, steuern Sie dies zunächst. Wenn die meisten durch ungeplante CSS-Patches, kontrollieren Sie das; und so weiter.

Dies bietet Ihnen nicht nur die beste Rendite für Zeitinvestitionen, sondern auch gute Gründe für die künftige Ausweitung der Verwendung der Versionskontrolle: "Da wir dem Anwendungscode die Versionskontrolle hinzugefügt haben, ungeplante Ausfälle über 30 Minuten sind von 11 pro Monat auf 2 gesunken. Diese beiden wurden durch statische HTML-Änderungen verursacht, daher beabsichtigen wir, die nächsten Versionskontrollen durchzuführen. "

Ein abgestufter Rollout bietet Ihnen auch qualifizierte Benutzer innerhalb des Unternehmens. Ja, Sie mussten allen sechs App-Entwicklern den Umgang mit dem System beibringen, aber sie haben gelernt, und sie sind damit einverstanden. Jetzt, da es Zeit ist, das System für das CSS-Team bereitzustellen, haben Sie sechs weitere interne Experten als vor drei Monaten. Möglicherweise haben Sie zu diesem Zeitpunkt sogar Konvertiten. Ein Entwickler, dessen Arsch durch die Fähigkeit gerettet wurde, eine schädliche Veränderung umgehend rückgängig zu machen, ist möglicherweise Ihr bester Evangelist im CSS-Team.

Bearbeiten 1: Wenn Sie sich für diese Route entscheiden, besteht ein billiger Backstop darin, Tripwire oben hinzuzufügen , zumindest auf einer Produktionsbox. Auf diese Weise können Sie schnell feststellen, was sich geändert hat , wenn die Dinge kaputt gehen, das VCS jedoch angibt, dass es nichts ist , wofür es derzeit verantwortlich ist. Dies beschleunigt die Korrektur und schlägt Ihren nächsten Kandidaten für die Versionskontrolle vor.

MadHatter
quelle
1
IMHO ist es einfach besser, in Stiefeln und allem zu gehen und das alles zu versionieren. Es wird oft zurückkommen, um dich zu beißen, wenn du es nicht tust. zB habe ich früher nicht in Bibliotheken von Drittanbietern eingecheckt, aber jetzt schon. Der Grund dafür ist, dass es aufgrund der Abhängigkeiten besser ist, das gesamte System aus der Versionskontrolle herauszuholen, als zu versuchen, alles zusammenzusetzen und zum Laufen zu bringen. Wenn Sie dies nicht tun, müssen Sie Kopien kompatibler Bits verwalten und dokumentieren, was von was abhängt. Mit VC checken Sie einfach alles ein und es sollte funktionieren, wenn Sie alles auschecken. Verstehst du was ich meine?
Matt
Hey, ich auch; Lesen Sie das Bit "Ich stimme zu, dass die beste Vorgehensweise darin besteht, alles zu versionieren". Aber in Edit 1 fragt das OP speziell nach alternativen Strategien zu den besten, und dies ist sehr viel zweitbester, afaict.
MadHatter
Sorry Mann, ich habe diesen Absatz als "es ist nicht praktisch" falsch verstanden, wenn er sagt "wenn es nicht praktisch ist ...", also hast du ganz recht, es ist eine Alternative.
Matt
Dies ist in der Tat eine praktikable Alternative. Besonders mit einer Unternehmensphilosophie: "Beweisen Sie es, bevor wir uns voll und ganz dazu verpflichten".
DTest
2

Versionskontrolle alles. Es macht keinen Sinn, HTML-Dateien unter Versionskontrolle zu haben und dann eine Site aufgrund einer Änderung im CSS, die nicht kontrolliert wird und daher nicht einfach rückgängig gemacht werden kann, vollständig zu verschrauben.

Fallstricke: Ich persönlich bin während meiner zugegebenermaßen ziemlich eingeschränkten Verwendung der Versionskontrolle auf keine gestoßen.

Bereitstellung: Ich verwende derzeit Subversion, die auf Windows-Boxen gehostet wird, sowohl bei der Arbeit als auch zu Hause. Windows nur, weil das verfügbar ist. Sonst hätte es genauso gut ein anderes Betriebssystem sein können. Der Schlüssel für Nicht-Tech-Benutzer ist, ihnen ein einfaches GUI-basiertes Tool für Importe, Exporte, Commits, Diffs usw. zu geben. Welches Tool verwendet wird, hängt ein wenig vom verwendeten Betriebssystem und VCS-System ab.

Verwendung: Wenn ich Codeänderungen vornehme, teste und festschreibe ich häufig. Dies ermöglicht es mir, so weit wie nötig zurückzugehen, wenn ich es vermassle. Wenn ich verschiedene Revisionen vergleiche und Teile des Codes kopiere, muss ich nicht jede Änderung verlieren, nur weil ich zu einer früheren Version zurückkehren muss, um einige Probleme in einem anderen Teil des Codes zu beheben.

Zusätzlicher Vorteil: Sie können über ein VPN oder eine sichere Verbindung Zugriff auf das Quell-Repository gewähren, sodass Benutzer von zu Hause oder von einem anderen Ort aus arbeiten können. zB könnte ich mir zu Hause eine Idee machen und dort und dann meinen Arbeitscode bearbeiten, bevor ich den Gedanken verliere.

John Gardeniers
quelle
2

Version alles.

Die Bereitstellung hängt davon ab, wie viel Sie für jede dieser Sites "anpassen" müssen. Wenn sie bis auf eine oder zwei Konfigurationsdateien identisch sind, können Sie einfach eine Kopie des Codes auschecken und geringfügige Änderungen vornehmen. Führen Sie bei Bedarf den Aktualisierungsbefehl Ihrer Versionskontrolle für jeden der Clients aus.

Wenn Sie das Verteilungsmodell "Kasse direkt in die Website des Kunden" verwenden, möchten Sie sicherstellen, dass Ihr Server den Zugriff auf die Versionskontrollverzeichnisse ausschließt, damit Benutzer nicht zu http://example.com/ navigieren können. git / und guck in deine Interna. Außerdem hätte ich definitiv einen Test- und Produktions-Virtualhost für jeden Client, um sicherzustellen, dass ein Site-Update nicht durcheinander gerät. Insbesondere wenn Sie benutzerdefinierte Änderungen an den Dateien einzelner Clients vornehmen, müssen Sie Konflikte behandeln, bevor Änderungen live geschaltet werden. In diesem Fall würden Sie den virtuellen Testhost auschecken / aktualisieren und wenn alles richtig funktioniert, den virtuellen Testhost auf den virtuellen Produktionshost kopieren.

DerfK
quelle
Leider muss es so eingerichtet werden, dass jede Site "benutzerdefiniert" ist, um die Möglichkeit der Anpassung zu ermöglichen (auch wenn derzeit keine vorhanden ist)
DTest
@DTest dies kann immer noch durchgeführt werden, es bedeutet nur mehr Arbeit für mehr Konflikte, abhängig von der Art der Anpassung. Wenn Sie viele Anpassungen vornehmen, ist es natürlich vorzuziehen, Konflikte zu lösen, anstatt zu vergessen, dass Sie index.php für einen Client geändert und durch eine neue index.php ersetzt haben, die nicht mehr über die speziellen Funktionen verfügt
DerfK
@DTest auch, ich werde die "verteilte Versionskontrolle" Vorschläge für diesen Fall unterstützen. Sie können die benutzerdefinierten Änderungen, die Sie für einen Client vorgenommen haben, tatsächlich verfolgen und in das "persönliche" Repository des Clients einchecken und dann Änderungen aus dem "zentralen" Repository abrufen (die benutzerdefinierten Änderungen des Clients werden niemals zurückgeschoben ein Client zum zentralen Repository)
DerfK
0

Alles, was die Leute über die Version sagen, ist gut.

Wenn Sie sich für Subversion entscheiden, kann ich empfehlen, den Bitnami Trac-Stack auszuprobieren. http://bitnami.org/stack/trac

Es vereinfacht das Einrichten von Subversion für Sie, enthält ein Ticketing-System (das Sie zu diesem Zeitpunkt verwenden können oder nicht), um Änderungen und Fehler zu verfolgen, und ein Wiki, mit dem Sie dokumentieren können, wie Ihre Entwickler es verwenden sollen das System.

Geben Sie allen Windows-Entwicklern TortoiseSVN. Bringen Sie allen ein paar Grundlagen der SVN-Befehlszeile bei.

Letztendlich ist das Tool weniger wichtig als die Denkweise, die Sie Ihren Entwicklern vermitteln müssen. Hoffentlich werden sie bald sehen, dass die Versionskontrolle eine gute Sache ist, da sie dadurch nicht mehr Arbeit verlieren und von Sackgassen zurückkehren können, die sie nirgendwo zurück in bekannte gute Zustände führen. Die Vorteile überwiegen den (geringen) Aufwand.

nick3216
quelle