Git-Zweige organisieren

Lesezeit: 5 Minuten

Benutzer-Avatar
mgilson

Ich habe ein großes Projekt, an dem ich arbeite und das Git als VCS verwendet. Zu jeder Zeit arbeite ich daran, ein paar Features/Bugfixes usw. zu implementieren. Für jedes gegebene Feature/Bug wäre es schön, eine Hierarchie von Zweigen zu erstellen — zB

$ git branch
  feature1
       sub-branch1
       sub-branch2
       sub-branch3
  feature2
       sub-brancha
      *sub-branchb  #<--currently checked out
       sub-branchc
  bugfix1
       sub-branch-foo

$ git checkout sub-brancha
$ git branch
  feature1
       sub-branch1
       sub-branch2
       sub-branch3
  feature2
      *sub-brancha  #<--currently checked out
       sub-branchb  
       sub-branchc
  bugfix1
       sub-branch-foo

Ist es möglich, so etwas zu tun, oder muss ich ein primitiveres Namensschema übernehmen?

BEARBEITEN

Um es etwas konkreter zu machen, wonach ich suche, wenn feature1 ein Git-Branch ist, dann wäre im obigen Beispiel sub-branch1 alle von erstellt worden git checkout -b sub-branch1 von dem feature1 Branch (der vom Master verzweigt ist). z.B:

$ git checkout master
$ git checkout -b feature1
$ git checkout -b testing
$ git branch
master
   feature1
     *testing
$ git checkout master
$ git checkout -b feature2
$ git branch
master
   feature1
      testing
  *feature2

Git-Zweige einfach Zweige nach ihrer Herkunft organisieren zu lassen (mit einer kleinen zusätzlichen Einrückung), ist wahrscheinlich gut genug für meine Zwecke … Obwohl super Bonuspunkte, wenn ich haben kann:

$ git branch
  feature1
       testing
  feature2
       testing
  bugfix1
       sub-branch-foo

Mit einer Möglichkeit, den Namenskonflikt zwischen “feature1/testing” und “feature2/testing” zu verwalten

  • Warum haben Sie verschiedene Unterzweige für neue Funktionsentwicklungen?

    – Fatih Arslan

    15. Juni 2012 um 13:13 Uhr

  • @FatihArslan: Warum nicht? Ein Feature ändert nicht nur ein einzelnes Stück Code — Ein Feature könnte eine ganze Reihe von Codes berühren, wobei jedes Stück separat getestet/entwickelt werden kann … Oder ich habe Feature-Alpha (stabil) und Feature- Beta (instabil). Alpha scheint für mich zu funktionieren, aber Beta nimmt einige Änderungen vor, um die Leistung zu steigern … Das sind zwei Fälle, die mir spontan einfallen. Aus meiner Sicht ist der Grund dafür nichts anderes als der Grund, überhaupt Niederlassungen zu haben.

    – Mgilson

    15. Juni 2012 um 13:19 Uhr

  • Was ist die Frage? Fragen Sie sich, ob Sie Zweige aus Zweigen machen können oder ob Sie die ändern können? git branch Ausgabeformat?

    – Abe Völker

    15. Juni 2012 um 13:25 Uhr

  • @AbeVoelker – Ich möchte eine bessere Möglichkeit, Zweige in Unterüberschriften zu organisieren. Wenn ich leicht nachvollziehen kann, woher ein Zweig kam (z. B. über eine Einrückungsebene in Git-Zweig), wäre das wahrscheinlich gut genug.

    – Mgilson

    15. Juni 2012 um 13:30 Uhr

Sie können ein Benennungsschema wie feature1/sub-brancha, feature2/sub-branchb usw. verwenden, der Schrägstrich im Namen ist für git kein Problem. Die Zweige werden jedoch weiterhin als normale Zweige behandelt (aber ich wüsste nicht, wie man Unterzweige anders handhaben könnte). Der Befehl git branch listet die Branches natürlich mit ihrem vollständigen Namen auf und nicht so, wie es im Beispiel ist.

Interessanterweise erstellen die Benennungsschemata mit Schrägstrichen eine Verzeichnishierarchie in .git/refs/heads/. Vielleicht ist das nützlich, um die Unterzweige mit einigen Low-Level-Befehlen zu handhaben?

  • seufzen – das habe ich befürchtet. Jedes Mal, wenn ich das mache, vergesse ich es am Ende, und dann verschwindet das ganze Schema. Ich hoffte, Idiot könnte meine desorganisierten Tendenzen für mich beseitigen …

    – Mgilson

    15. Juni 2012 um 13:43 Uhr

  • Sie könnten ein kleines Tool schreiben, um Ihr Namensschema durchzusetzen. Vielleicht können einige Aliase schon ausreichen. Oder Sie schauen sich um gitflow was ein bisschen in diese Richtung geht (aber vielleicht nicht ganz das ist, was Sie brauchen).

    – jgosmann

    15. Juni 2012 um 17:00 Uhr

  • gitflow sieht definitiv nach einem Schritt in die richtige Richtung aus. Danke für diesen Link.

    – Mgilson

    15. Juni 2012 um 18:31 Uhr

  • Erwähnenswert ist auch, dass einige GUI-Clients wie Turm gruppieren Sie Zweige, wenn Sie sie auf diese Weise benennen (dh. feature/sub-branch1 und feature/sub-branch2 werden sub-branch1 und sub-branch2 darunter gruppiert feature).

    – Alejandro García Iglesias

    7. Februar 2014 um 0:08 Uhr


  • Obwohl dies eine gute Strategie ist, gibt es einen wichtigen Punkt, an den Sie sich erinnern sollten. Wenn Sie einen Branch namens feature1 erstellen, können Sie keinen Branch namens feature1/sub1 erstellen. Sie müssen also feature1/main erstellen, und dann können Sie feature1/sub1 erstellen. Wenn Sie also entweder unter dem Feature1-Zweig arbeiten oder Arbeit darin integrieren möchten.

    – Noam

    24. September 2017 um 12:30 Uhr

Benutzer-Avatar
migu

Branches in Git sind tatsächlich symbolische Verweise auf einen Schlüssel im Objektspeicher von Git. Um die Dokumentation zu zitieren (“Was ist ein Zweig”):

Wenn es ganz genau sein muss, verwenden wir das Wort „Zweig“ für eine Entwicklungslinie und „Zweigkopf“ (oder einfach nur „Kopf“) für einen Verweis auf den letzten Commit in einem Zweig. Im obigen Beispiel ist der Zweigkopf mit dem Namen “A” ein Zeiger auf einen bestimmten Commit, aber wir beziehen uns auf die Zeile mit drei Commits, die zu diesem Punkt führen, als alle Teil von “Zweig A”.

Git verwaltet nur eine Liste von Referenzen, die in Dateien unter gespeichert werden .git/refs. Diese Referenzen sind einfach nicht als baumartige Struktur konzipiert.

Ich empfehle, ein Schema zur Benennung von Zweigen zu verwenden, das die Hierarchie vermittelt.

Eine andere Möglichkeit besteht darin, eine Erweiterung zu schreiben, die den Zweigbaum für Sie verwaltet.

  • Aber beim Verfolgen von Fernbedienungen hat es eine (primitive) baumartige Struktur … (ein Zweig, der eine Fernbedienung verfolgt, weiß, woher sie kommt) – Warum kann ein Zweig nicht verfolgen, woher sie lokal kommt?

    – Mgilson

    15. Juni 2012 um 13:44 Uhr


  • Ich denke, die Schöpfer von Git wollten es so einfach wie möglich halten. Das Einfügen einer Baumstruktur für Zweige würde das Design erschweren. Da Zweige von anderen Zweigen abgeleitet werden können, ist es kein Problem, Zweige in einem anständigen Namensschema zu organisieren. Die Interpretation des Baums bleibt dann aber dem Benutzer überlassen.

    – migu

    15. Juni 2012 um 14:30 Uhr


Benutzer-Avatar
zkolnik

Ich habe persönlich verwendet Dies Ansatz in früheren Versionen von Git, aber es scheint, dass verschachtelte Branches in Version 1.8+ nicht mehr unterstützt werden.

Es war auch schön, die UI-Unterstützung in Git Tower zu sehen.

Geben Sie hier die Bildbeschreibung ein

1176520cookie-checkGit-Zweige organisieren

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy