Intelligente Lösungen
in neuer Dimension

Git: Verwendung von Submodules

Manchmal arbeitet man an einem Projekt, bei welchem sich die Quelltexte auf mehrere Git-Repos verteilen. Diese kann man mittels Git-Submodules zusammenführen.

Ausgangslage

Ich habe ein Git-Projekt “dp-octopress” und möchte in dieses das Git-Projekt “datenschutz” mit eingebunden haben. Hintergrund: Beide Projekte enthalten Texte, die auf unserer Webseite veröffentlicht werden sollen. Ich möchte eine Duplizierung der Ablageorte vermeiden!

Sicherstellen: Git-Abzug ist aktuell

1
2
3
4
5
cd dp-octopress
git checkout master
git update
git status
# keine Ausgabe!

Submodul “datenschutz” einbinden

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ cd dp-octopress
dp-octopress $ cd source
dp-octopress/source$ git submodule add ssh://[email protected]/dp-team-intern/datenschutz.git dsm
Klone nach '/home/uli/git/dp-octopress/source/dsm' ...
remote: Counting objects: 127, done
remote: Finding sources: 100% (127/127)
remote: Getting sizes: 100% (68/68)
remote: Compressing objects: 100% (39702/39702)
remote: Total 643 (delta 41), reused 633 (delta 40)
Empfange Objekte: 100% (643/643), 10.02 MiB | 614.00 KiB/s, Fertig.
Löse Unterschiede auf: 100% (272/272), Fertig.
dp-octopress/source$ cd ..
dp-octopress $ git status
...
  neue Datei:     .gitmodules
  neue Datei:     source/dsm
...
dp-octopress $ git commit -m "datenschutz eingebunden" .
dp-octopress $ git push

Checkouts von “dp-octopress” aktualisieren

Wenn irgendwo Checkouts von “dp-octopress” existieren, so müssen diese mit einem speziellen Verfahren aktualisiert werden, damit sie mit dem neuen Submodul umgehen können:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$ cd dp-octopress
dp-octopress $ git fetch --all -p
dp-octopress $ git status
Auf Branch master
Ihr Branch ist 22 Commits hinter 'origin/master', und kann vorgespult werden.
  (benutzen Sie "git pull", um Ihren lokalen Branch zu aktualisieren)

nichts zu committen, Arbeitsverzeichnis unverändert
dp-octopress $ git pull
Aktualisiere dad0a29..b2c0bbe
Fast-forward
 .gitmodules                                          |   3 +++
 source/_posts/2020-05-29-ubuntu-2004-arbeitsplatz.md |  13 +++++++++++++
 source/_posts/2020-06-29-ubuntu-workspaces.md        |   6 ++++++
 source/_posts/2020-07-02-ubuntu-luks-multi.md        | 115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 source/_posts/2020-07-08-crt-in-jks.md               |  31 +++++++++++++++++++++++++++++++
 source/dsm-intern/datenschutz                        |   1 +
 source/dsm-intern/index.html                         |  11 +++++++++++
 source/dsm-intern/index.md                           |   0
 source/images/ubuntu-desktop.png                     | Bin 0 -> 463944 bytes
 9 files changed, 180 insertions(+)
 create mode 100644 .gitmodules
 create mode 100644 source/_posts/2020-07-02-ubuntu-luks-multi.md
 create mode 100644 source/_posts/2020-07-08-crt-in-jks.md
 create mode 160000 source/dsm-intern/datenschutz
 create mode 100644 source/dsm-intern/index.html
 create mode 100644 source/dsm-intern/index.md
 create mode 100644 source/images/ubuntu-desktop.png
 # Die Zeile mit ".gitmodules" deutet darauf hin, dass man was mit Submodules machen muss!

dp-octopress $ git submodule update
Submodul-Pfad: 'source/dsm': 'c39992c0aa6ee3e6bdc1bfb448c7e0a129a4075e' ausgecheckt

Aktualisieren ohne Submodules

1
git pull

Aktualisieren mit Submodules

1
2
git pull
git submodule update

Arbeit mit den Repos

Die beiden Repos

  • dp-octopress
  • datenschutz

können weitgehend unabhängig voneinander bearbeitet werden. Änderungen an “datenschutz” fliessen nicht nicht automatisch in “dp-octopress” ein!

Aktualisieren des Submodules

1
2
3
4
5
git submodule foreach git pull
# Prüfen: Passen die Änderungen? "Funktioniert" dp-octpress mit dem neuen Stand von datenschutz?
# Falls: Ja/ja -> weiter!
git commit -m "dsm aktualisiert" .
git push