3 Stimmen

Release-Management mit einem verteilten Versionskontrollsystem

Wir erwägen einen Wechsel von SVN zu einem verteilten VCS an meinem Arbeitsplatz.

Ich kenne alle Gründe, warum man ein DVCS für die tägliche Entwicklung verwenden möchte: Lokale Versionierung, einfachere Zweige und Zusammenführungen usw., aber ich habe nicht viel überzeugendes gesehen, was das Verwalten von Softwareveröffentlichungen betrifft. Hier ist unser Veröffentlichungsprozess:

  • Feststellen, welche Änderungen zum Zusammenführen verfügbar sind.
  • Führen Sie eine Abfrage aus, um die Fehler/Tickets zu finden, die mit diesen Änderungen verbunden sind.
  • Filtern Sie Änderungen heraus, die mit "offenen" Tickets verbunden sind. In unserer Umgebung müssen Tickets in einem geschlossenen Zustand sein, um mit einem Veröffentlichungszweig zusammengeführt zu werden.
  • Filtern Sie Änderungen heraus, die wir nicht im Veröffentlichungszweig haben möchten. Wir sind sehr konservativ, wenn es darum geht, Änderungen zusammenzuführen. Wenn eine Änderung nicht unbedingt erforderlich ist, wird sie nicht zusammengeführt.
  • Führen Sie verfügbare Änderungen zusammen, vorzugsweise in chronologischer Reihenfolge. Wir gruppieren Änderungen zusammen, wenn sie mit demselben Ticket verbunden sind.
  • Blockieren Sie unerwünschte Änderungen aus dem Veröffentlichungszweig (svnmerge block), damit wir nicht erneut damit umgehen müssen.

Manchmal jonglieren wir mit 3-5 verschiedenen Meilensteinen gleichzeitig. Einige Meilensteine haben sehr unterschiedliche Einschränkungen, und die Blockierliste kann ziemlich lang werden.

Ich habe mit git, mercurial und plastic experimentiert, und soweit ich das beurteilen kann, bewältigen sie dieses Modell nicht besonders gut. Es scheint, als würden sie sehr gut funktionieren, wenn man nur ein Produkt veröffentlicht, aber ich kann mir nicht vorstellen, sie für das Jonglieren mit mehreren, sehr unterschiedlichen Produkten aus demselben Codebereich zu verwenden.

Beispielsweise scheint das Herauspicken in mercurial eine Nebensache zu sein. (Sie müssen die 'transplant'-Erweiterung verwenden, die standardmäßig deaktiviert ist). Nachdem Sie eine Änderung in einen Zweig herausgepickt haben, wird sie immer noch als verfügbare Integration angezeigt. Das Herauspicken bricht die Arbeitsweise von mercurial.

Ein DVCS scheint besser für Feature-Zweige geeignet zu sein. Es ist kein Herauspicken erforderlich, wenn Sie direkt von einem Feature-Zweig auf den Stamm und auf den Veröffentlichungszweig zusammenführen. Aber wer möchte die ganze Zeit all diese Zusammenführungen machen? Und wie fragen Sie ab, was zum Zusammenführen verfügbar ist? Und wie stellen Sie sicher, dass alle Änderungen in einem Feature-Zweig zusammengehören? Das klingt nach totalem Chaos.

Ich bin hin- und hergerissen, weil der Programmierer in mir ein DVCS für die tägliche Arbeit haben möchte. Ich will es wirklich. Aber ich fürchte den Tag, an dem ich den Verwaltungshut aufsetzen muss und entscheiden muss, was zusammengeführt werden muss und was nicht. Ich will Code schreiben, ich will kein Zusammenführungsaffe sein.

2voto

Andrew McGregor Punkte 27766

Sie sollten wirklich git in dieser Situation verwenden, da es in Bezug auf das Zusammenführen und das Release-Management so weit überlegen ist. Git ermöglicht einen Freigabeprozess, damit Änderungen veröffentlicht werden können; es bietet tatsächlich Unterstützung für mehrere Ebenen des Release-Managements, genau weil das ist, wie Linux verwaltet wird.

Legen Sie einfach jede Veröffentlichung in einem separaten Branch ab. Anstatt Änderungen zu blockieren, die Sie nicht möchten, akzeptieren Sie nur diejenigen, die Sie möchten, indem Sie nur die Änderungen für die Freigabe freigeben, die auch tatsächlich veröffentlicht werden sollen.

Git ermöglicht es auch, eine Reihe von Änderungen in einem einzelnen Patch auszuwählen, um sie an die Entwickler weiterzuleiten, sodass Sie nicht alle 'Oops, das hat nicht ganz funktioniert'-Patches in den Release-Branch oder das Repository übernehmen müssen, sondern nur schön saubere Feature- oder Fix-Patches.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X