Außerhalb der Uhr werde ich versuchen, eine Strategie für die Versionskontrolle für mein Unternehmen zu entwickeln. Wir verwenden derzeit SVN, aber es gibt keine Struktur - wir haben im Grunde nur einen Trunk und verpflichten uns nur dazu. Vor kurzem hat der Entwicklungsmanager ein zweites Repository gestartet, das als "Tag" fungiert. Es muss jedoch manuell mit dem "Trunk" zusammengeführt werden, da es nicht Teil desselben Repositorys ist, sondern ein völlig separates. Tatsächlich gibt es nur einen Ordner mit dem Namen "Dev" (es gibt tatsächlich verschiedene "Dev" -Ordner zu unterschiedlichen Daten, aber nur "Dev" ist der Hauptordner) und darunter befindet sich alles andere. alle anderen Projekte. Es ist überhaupt nicht nach Projekten organisiert, es gibt kein Konzept für Zweige / Tag / Stamm oder irgendetwas. Die Person, die es ursprünglich eingerichtet hat (längst vorbei, natürlich) schien überhaupt nicht zu wissen, wie man SVN einrichtet, und seitdem hat sich niemand die Mühe gemacht, zu lernen, wie man Dinge richtig macht, aus Angst, etwas zu zerbrechen. Wir verwenden keinerlei CI (oder leider automatisierte Tests).
Erstens, sollten wir es nach Projekten trennen lassen? Zum Beispiel haben wir: Zwei ASP.NET-Websites (nicht Webanwendungen, Websites), einen Webdienst, einen Bereitstellungsordner für alle Tabellenskripte und gespeicherten Prozeduren, zwei Befehlszeilenclients für externe Projekte, die von der aufgerufen werden Websites und ein freigegebener Ordner mit gemeinsamen Geschäftsobjekten und dergleichen. Sollte jedes dieser Projekte ein eigenes Projekt mit einem Branch / Tag / Trunk-Setup sein oder sollte es so aussehen:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
und haben alle Zweige und alles eine Kopie des gesamten Dev-Ordners? Dieser Ansatz ist möglicherweise leichter zu schlucken, da wir häufig Situationen haben, in denen wir Änderungen an der gemeinsam genutzten Codebibliothek und an mindestens einer (normalerweise beiden) der Websites vornehmen müssen.
Zweitens machen wir regelmäßige Releases ("Pushs" in unserer Sprache) auf unserem Dev-Server und Live-Server. Nach dem, was ich gelesen habe, würde der beste Weg, dies zu handhaben, darin bestehen, dass die gesamte Entwicklung in Trunk / geht, Zweige "temporär" sind und zum Hinzufügen einer neuen Funktion verwendet werden, die sich auf Trunk auswirken könnte, und Tags für Releases vorgesehen sind. Also, wir pushen jeden Monat, sagen wir, und ich arbeite an einem brandneuen Modul. Ich würde Trunk verzweigen und diesen Zweig für meinen Code verwenden, ihn schreiben und testen und was auch immer. Wenn das Modul fertig ist, füge ich es wieder in den Trunk ein (und lösche möglicherweise den Zweig), und wenn wir bereit sind, es bereitzustellen, markieren wir es (sagen wir "May2011"). Wenn wir einen Bugfix haben, nachdem er live geschaltet wurde, wird er im May2011-Tag behoben und in Trunk zusammengeführt (damit Trunk auch den Fix erhält). und dann würde May2011 mit dem Fix wieder rausgeschoben? Ist dies die Absicht des Markierens?