git-Submodul-Tracking spätestens

Lesezeit: 4 Minuten

git Submodul Tracking spatestens
l.dee.a

Wir verschieben unser (riesiges) Projekt auf Git und denken darüber nach, Submodule zu verwenden. Unser Plan ist es, drei verschiedene Köpfe im Superprojekt zu haben:

Release, stabil, neueste

Die Projektleiter kümmern sich um die Release- und Stable-Zweige. Sie verschieben die Submodule nach Bedarf.

Das Problem ist der “neueste” Kopf. Wir möchten, dass der “neueste” Kopf des Superprojekts die Master-Zweige aller Submodule (automatisch) verfolgt. Und es wäre auch toll, wenn es den Verlauf aller Commits an das Submodul anzeigen würde.

Ich habe mir gitslave angesehen, aber es ist nicht ganz das, was wir wollen. Irgendwelche Vorschläge?

  • Während Sie nach einem Tool gefragt haben, möchte ich nur diese Frage verbinden, die Einzeiler sammelt, die dasselbe tun: stackoverflow.com/questions/1030169/…

    – Tobus

    4. November 2012 um 23:49 Uhr

  • Git bietet jetzt das neueste Tracking mit Submodulen an: siehe meine bearbeitete Antwort.

    – VonC

    3. April 2013 um 9:04 Uhr

git Submodul Tracking spatestens
VonC

Bearbeiten (2020.12.28): GitHub ändert Standard Meister verzweigen zu hauptsächlich Niederlassung seit Oktober 2020. Siehe https://github.com/github/umbenennen

Diese Antwort unten spiegelt immer noch die alte Namenskonvention wider.


Aktualisierung März 2013

Git 1.8.2 Möglichkeit hinzugefügt, Zweige zu verfolgen.

git submodule“Angefangen, einen neuen Modus zu lernen Integration mit der Spitze des Remote-Zweigs (im Gegensatz zur Integration mit dem im Gitlink des Superprojekts aufgezeichneten Commit).

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

Wenn Sie ein Submodul hatten bereits anwesend Sie möchten jetzt einen Zweig verfolgen, siehe “wie man ein vorhandenes Submodul dazu bringt, eine Verzweigung zu verfolgen“.

Siehe auch Vogellas Tutorial zu Submodulen für allgemeine Informationen zu Submodulen.

Notiz:

git submodule add -b . [URL to Git repo];
                    ^^^

Sehen git submodule Manpage:

Ein besonderer Wert von . wird verwendet, um darauf hinzuweisen Der Name des Zweigs im Submodul sollte derselbe Name sein wie der aktuelle Zweig im aktuellen Repository.


Sehen begehen Sie b928922727d6691a3bdc28160f93f25712c565f6:

submodule add: Wenn --branch gegeben ist, tragen Sie es ein .gitmodules

Unterzeichnet von: W. Trevor King

Dadurch können Sie ganz einfach a aufnehmen submodule.<name>.branch Möglichkeit ein .gitmodules wenn Sie ein neues Submodul hinzufügen. Mit diesem Patch

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

reduziert zu

$ git submodule add -b <branch> <repository> [<path>]

Dies bedeutet, dass zukünftige Anrufe zu

$ git submodule update --remote ...

erhält Updates von demselben Zweig, den Sie verwendet haben, um das Submodul zu initialisieren, was normalerweise das ist, was Sie wollen.


Ursprüngliche Antwort (Februar 2012):

Ein Submodul ist ein einzelnes Commit, auf das von einem übergeordneten Repo verwiesen wird.
Da es sich um ein eigenständiges Git-Repo handelt, ist der “Verlauf aller Commits” über a zugänglich git log innerhalb dieses Untermoduls.

Damit ein übergeordnetes Element automatisch den letzten Commit eines bestimmten Zweigs eines Submoduls verfolgen kann, müsste es Folgendes tun:

  • cd im Submodul
  • git fetch/pull um sicherzustellen, dass es die neuesten Commits im richtigen Zweig hat
  • cd zurück in das übergeordnete Repo
  • add und commit, um das neue Commit des Submoduls aufzuzeichnen.

Gitslave (das Sie sich bereits angesehen haben) scheint am besten geeignet zu sein, auch für die Commit-Operation.

Es ist ein wenig lästig, Änderungen am Submodul vorzunehmen, da man in den richtigen Submodul-Zweig auschecken, die Änderung vornehmen, festschreiben und dann in das Superprojekt gehen und die Übergabe festschreiben muss (oder zumindest den neuen Speicherort der Submodul).

Weitere Alternativen sind hier aufgeführt.

  • @BraveNewMath Sie müssen den richtigen Zweig in Ihrem Submodul auschecken, dann zu Ihrem übergeordneten Repo gehen und Folgendes eingeben: git config -f .gitmodules submodule.<path>.branch <branch>. Fügen Sie alles hinzu, verpflichten Sie sich und pushen Sie.

    – VonC

    13. September 2013 um 3:51 Uhr

  • @BraveNewMath Ich beschreibe alle Schritte, um ein Submodul dazu zu bringen, eine Verzweigung in stackoverflow.com/a/18799234/6309 zu verfolgen.

    – VonC

    14. September 2013 um 7:01 Uhr

  • Es ist wichtig, die zu verwenden --remote Tag, wenn Sie beim Aktualisieren keine abgetrennten Köpfe erhalten möchten und sich fragen, warum es so aussieht, als ob Ihr frisch gezogener Code hinter master zurückbleibt!

    – Chris Watt

    28. August 2015 um 16:40 Uhr

  • @DC_ Ich stimme “dieser Antwort” zu (da ich sie geschrieben habe). Die Funktion “Einem Zweig folgen” soll ein Submodul auf den neuesten Commit eines Zweigs aktualisieren. Sobald dies erledigt ist, müssen Sie immer noch den neuen Submodulstatus im übergeordneten Repo hinzufügen und festschreiben. Und der nächste Klon wird diesen Zustand auschecken (kopflos).

    – VonC

    26. Juli 2017 um 19:54 Uhr

  • @VonC Um dies weiter zu verdeutlichen, wirkt sich die Funktion “Einem Zweig folgen” nur auf das Verhalten von aus git submodule update Befehl, indem Sie ihm mitteilen, auf welches Commit (dh das letzte Commit auf dem Master) das Submodul aktualisiert werden soll, und nicht automatisch das übergeordnete Repo veranlassen, zu aktualisieren, auf welches Commit das Submodul zur Klonzeit zeigt?

    – christner

    26. Juli 2017 um 20:22 Uhr

986080cookie-checkgit-Submodul-Tracking spätestens

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

Privacy policy