Frage

In einem früheren Job war ich einfacher, eine stabile Vorabwaufbranche (oder das Hauptabbau) zu verwalten und zu führen, indem jeder Entwickler an seiner eigenen Zweigstelle arbeitet. Wir hatten nur eine einzelne Produktionsinstanz, sodass mehrere Versionen derselben Apps nicht unterstützt werden müssen.

Diese "Pre-Release" -Ast wird so benannt, weil es eine andere Filiale (Haupt) gab, in der wir unsere Inszenierungs- und Produktionsveröffentlichungen durchführen würden. Die Zweige wurden so eingerichtet, dass nur Code aus der Zweigabteilung in den Release-Zweig zusammengefasst werden konnte. Diese Zusammenschlüsse waren unsere Code -Review -Kontrollpunkte. Die CI-Builds wurden ebenfalls aus dieser Zweigstelle vor der Veröffentlichung hergestellt und es war an jedem Entwickler, von "Prevertrease" bis zu seinem eigenen Zweig zu Migitage Complex Fusion-Problemen zu verschmelzen, wenn die Entwicklung für diese Arbeit abgeschlossen war.

Wenn Entwickler die Notwendigkeit bestand, sich zu kombinieren und zusammenzuarbeiten, haben nichts als ihre eigenen Zweige die Berechtigungen daran gehindert, mit anderen zusammenzuarbeiten. Dies funktionierte gut für die Verwaltung verteilter Teams, bei denen Einzelpersonen in jedem Team an separaten/mehreren Funktionen arbeiteten.

Mit Hilfe von häufigen (1-2 Mal pro Woche) 30-minütige Status-Update-Meetings würden wir als Team entscheiden, was in die QA eingehen würde und was nicht für diese bestimmte QA-Veröffentlichung.

Dieses System hat funktioniert, aber ich finde viel Ressentiments für Entwicklerzweige bei der Suche nach diesem Thema. Es scheint eine Menge Begeisterung in Bezug auf die lokale Repository -Funktion von Git zu geben. Es scheint jedoch, dass sie nur unterschiedliche Möglichkeiten sind, dieselben Probleme anzugehen. Nicht in Betracht ziehen, um die Cand-Network-Probleme zu berücksichtigen, die lokale Repositories ansprechen, z. B. die Latenz und dergleichen.

War es hilfreich?

Lösung

Es gibt drei Hauptunterschiede:

  1. Lokales Repository bedeutet genau das: Es ist lokal für Ihr System. Wenn Sie jemals auf einer einsamen Insel ohne Internetverbindung gestrandet sind, können Sie Ihre Änderungen immer noch begehen. Eines der besten Dinge an Git ist, dass Sie nicht mit Ihrem Repository verbunden werden müssen, um das Versionskontrollsystem auszunutzen. Entwickler arbeiten manchmal aus der Ferne, ohne auf das Haupt -Repository zugreifen zu können, und das kann normalerweise unordentlich sein, wenn Sie ein System haben wie Subversion, Perforce, oder eine andere Art von zentralem Repository -Versionskontrollsystem. Mit Git und Bitkeeper, Sie können leicht offline arbeiten.

  2. In einem Entwicklerzweig Situation verzweigen Sie sich normalerweise von der Integration Zweig zu Ihrem Entwickler Zweig und Verschmelzung zur Integration Zweig. In Git verschmelzen Sie nicht, senden aber Patches und können Ihre Änderungen nicht nur an die senden Master -Repository, aber an andere Entwickler, ohne zuerst Ihren Patch an die zu senden Master -Repository. Dies ermöglicht es Entwicklern, zusammenzuarbeiten, ohne die zu berühren Master -Repository.

  3. In einem Entwickler/Integration Branch -Setup, die Entwicklerzweig ist im Repository, was bedeutet, dass andere es sehen können. In Git sind die Änderungen des Entwicklers nicht verfügbar, bis der Entwickler ihre Änderungen angibt.

Andere Tipps

Ein DVCs wie Git oder Mercurial führt einen Publikations -Workflow (Push/Pull) ein, der ist orthogonal zur Verzweigung.

Das bedeutet, dass:

  • Obwohl alle Entwickler an derselben Niederlassung arbeiten, können sie dies "privat" für ihr eigenes Repo tun: Solange sie nicht veröffentlichen, arbeiten sie (dh zu einem stromaufwärts gelegenen Repo), diese gemeinsame Zweigstelle ist tatsächlich ihre eigene. Sie können regelmäßig ziehen (abrufen + zusammenführen), um nicht zu sehr von der Arbeit anderer zum selben Thema abzuweichen, aber sie werden in der Fertigstellung vorantreiben.

  • Ein Entwickler könnte seine Arbeiten vielleicht sogar vorantreiben, aber ein Integrator kann wie viele Zweigstellen (mit demselben Namen) aus so vielen Entwickler -Repos, die Integrator benötigt, aus einem stromaufwärts gelegenen "Integration" -Repository holen: Jeder Zweig wird gelagert werden Das Integration Repo in seinem eigenen Namespace (dev1/branch, dev2/branch, dev3/branch, ...)
    Von dort aus kann der Integrator die Commits betrachten, die die einzelnen Entwicklerzweigs einführen und sich entscheiden, um die Veränderungen im Integrations -Repo zu verschmelzen oder nicht.
    HINWEIS: Dies unterscheidet sich in Mercurial geringfügig, da benannte Branch Namen in einem globalen Namespace hat (siehe Jakub Narębski's Antwort auf "Git und Mercurial - Vergleiche und Kontrast", Mit Blick auf die "Persönliche Meinung: Ich persönlich denke, dass" genannte Zweige "..." Teil)

Ein Git "Local Repo" verwandelt also jede Niederlassung in der Zweigstelle eines Entwicklers (der einen Entwickler nicht verhindert, seinen eigenen privaten Zweig auf denjenigen zu machen, die aus einem gemeinsamen Repo stammen).
Diese Zweige stehen für eine aktive Veröffentlichung (Push vom Entwickler) oder eine passive Veröffentlichung (Pull oder Fetch von einem Upstream -Repo, ohne direkte Intervention des Entwicklers) zur Verfügung.


Was David w's Antworten (Upvoted) macht klarer der Unterschied zwischen:

  • Arbeiten Sie aus einer Niederlassung in einem neuen Zweig (der mit einem Entwickler verbunden werden könnte, obwohl ich Zweige bevorzuge, die mit einer Aufgabe oder einer Reihe von Aufgaben verbunden sind, um eine Entwicklungsaufwand zu isolieren: siehe "Wann sollten Sie verzweigen?")
  • Arbeiten Sie aus einer Niederlassung aus einem Repo in Ihrem eigenen Repo: Sie können an der Arbeit arbeiten gleich Zweig, außer dass es sich um eine geklonte (Kopie) dieser Niederlassung aus einem stromaufwärts gelegenen Repo handelt.
    Wenn das Entwickler Repo von einem Integrator nicht zugänglich ist, dann sind ja, wie David sagt: "In Git sind die Änderungen des Entwicklers nicht verfügbar, bis der Entwickler ihre Änderungen liefert."
    Wenn das Repo des Entwicklers zugänglich ist (sogar durch ein einfaches ",Lokales Protokoll"Wie ein Netzwerkanteil) können die Änderungen des Entwicklers vom Downstream -Repo zu einer Integration vorgelagertem Repo gezogen werden.

Siehe auch "Beschreiben Sie Ihren Workflow bei der Verwendung von Versionskontrolle (VCS oder DVCs)."Eine andere Möglichkeit, die zentralisierte VCS -Methode zur Verwendung von Zweigen im Vergleich zur dezentralen VCS -Methode zur Verwendung von Repositorys zu kontrastieren.

Wenn es für Sie funktioniert hat, großartig. Ich denke, Sie würden feststellen, dass es mit einem DVCs noch besser funktionieren würde, weil sie alles unterstützen können, was Sie jetzt und mehr tun.

Ein Vorteil eines lokalen Repositorys gegenüber einem Entwicklerzweig besteht darin, dass Sie so viele Zweige haben können, wie Sie vor Ort möchten. Sie können einen kurzen Zweig aufdrehen, um etwas zu testen, auf das Sie neugierig sind. Sie können eine Zweigstelle übertreffen, um die Migration auf die neueste Version dieser Bibliothek zu testen, die Sie lieben. Alles, ohne den zentralisierten Server mit Dingen zu "verschmutzen", die vielleicht nie das Licht des Tages erkennen sollten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top