Mit Über- und Untermodulen arbeiten
In diesem Thema wird erläutert, wie Sie mit Git Übermodulen und Untermodulen arbeiten.
* 
Die folgenden Beispiele setzen voraus, dass Codebeamer auf localhost mit Port 8080 ausgeführt wird.
Zunächst müssen wir Folgendes erstellen:
1. Ein neues Codebeamer-Projekt namens "Mein Projekt".
2. Zwei anfänglich leere verwaltete Git-Repositories in diesem Projekt, die "Hauptbibliothek" und "XML-Bibliothek" genannt werden.
Untermodule zu Ihrem Projekt hinzufügen
1. Erstellen Sie ein Arbeitsverzeichnis:
$ mkdir $HOME/work
$ cd $HOME/work
2. Initialisieren Sie das xmllibrary-Repository (das vom Hauptprojekt verwendete Modul), indem Sie eine neue Datei importieren:
$ git clone http://localhost:8080/cb/git/xmllibrary
$ cd xmllibrary
$ echo Hello > xml-readme.txt
$ git add xml-readme.txt
$ git commit -m "New readme file of xmllibrary"
$ git push origin master
3. Initialisieren Sie das main-Repository auf ähnliche Weise:
$ cd $HOME/work
$ git clone http://localhost:8080/cb/git/main
$ cd main
$ echo World > main-readme.txt
$ git add main-readme.txt
4. Fügen Sie das Repository xmllibrary als Untermodul zum Repository Haupt hinzu, indem Sie den Master-Branch des Untermoduls verwenden.
$ git submodule add -b master http://localhost:8080/cb/git/xmllibrary
5. Alle Änderungen festschreiben und pushen:
$ git commit -m "Added a new file and a submodule"
$ git push origin master
Der Screenshot unten zeigt, dass der Master-Branch des Haupt-Repositorys jetzt den Master-Branch des xmllibrary-Repositorys verwendet (davon abhängig ist).
Wenn Sie nun auf den Link xmllibrary klicken, zeigt die neue Seite an, dass der Master-Branch des xmllibrary-Repository vom Master-Branch des Übermoduls Haupt verwendet wird.
Tags zu Über- und Untermodulen hinzufügen
Jetzt erstellen wir x_v1-Tags im xmllibrary-Repository und m_v1-Tags im Haupt-Repository und pushen sie:
$ cd $HOME/work/main/xmllibrary
$ git tag x_v1
$ git push --tags
$ cd $HOME/work/main
$ git tag m_v1
$ git push --tags
Der Screenshot unten zeigt, dass sowohl das Tag main/m_v1 als auch der Haupt-/Master-Branch von den Tags xmllibrary/x_v1 und xmllibrary/master abhängen.
Am Übermodul arbeiten
Wir nehmen jetzt eine Änderung in der Datei main-readme.txt von Haupt vor und kennzeichnen den neuen Status mit m_v2:
$ cd $HOME/work/main
$ echo World2 > main-readme.txt
$ git commit -a -m "A change in main"
$ git tag m_v2
$ git push --tags
Der Screenshot unten zeigt, dass das Tag main/m_v2 weiterhin vom Tag xmllibrary/x_v1 abhängt, da wir Änderungen nur in Haupt und nicht in xmllibrary vorgenommen haben.
Untermodule aktualisieren
Nehmen wir an, dass zwischenzeitlich eine neue Version der xml-Bibliothek veröffentlicht wurde. Wir möchten unser Projekt so aktualisieren, dass es diese neueste Version verwendet, ohne die vorherige Historie zu übernehmen.
Zuerst kehren wir zum xmllibrary-Repository zurück, das am Anfang der Beispiele geklont wurde, und rufen die neue Version in den Klon ab (sollte aktuell sein):
$ cd $HOME/work/xmllibrary
$ git pull
Das xmllibrary-Repository wurde außerhalb von Haupt geklont und kann völlig unabhängig von Haupt verwendet werden. So werden normalerweise Bibliotheken von Drittanbietern entwickelt.
Fügen Sie jetzt dem Repository xmllibrary eine neue Datei hinzu, und erstellen Sie das Tag x_v2, um anzuzeigen, dass es jetzt die neue Version der Bibliothek enthält:
$ echo Simple > INSTALL.txt
$ git add INSTALL.txt
$ git commit -m "New installation document"
$ git tag x_v2
$ git push --tags
Der Screenshot unten zeigt, dass kein Übermodul vom x_v2-Tag xmllibrary abhängt.
Auswirkungen von Änderungen in Modulen analysieren
Wenn Sie mit Modulen arbeiten, werden Sie sich häufig fragen: Ich habe diese Änderung hier (und ich weiß, dass sie einen neuen Fehler eingeführt hat), aber wie wirkt sich das in diesem Repository und in seinen Über-Repositories aus? Genauer gesagt, welche Tags und Branches enthalten diese Änderung im aktuellen Repository und seinen Über-Repositories (Übermodulen)?
Navigieren Sie zunächst zum Bildschirm Changeset-Details, indem Sie entweder auf der Registerkarte "Änderungen" des Repositorys oder auf der Registerkarte "Änderungen" eines betroffenen Vorgangs auf den Link mit dem SHA-Code der Änderung klicken.
Welche Tags und Branches des einschließenden Repositorys und der Über-Repositories sind von einer Änderung betroffen?
Es ist wichtig zu verstehen, auf welchen Tags und Branches ein Changeset im Repository und den Über-Repositories (Übermodulen) angezeigt wird und auf welche Tags und Branches es sich auswirkt.
Der nächste Bildschirm zeigt die folgenden Schritte an:
War dies hilfreich?