Intelligente Lösungen
in neuer Dimension

Git: Submodule und Zweige

Ich habe ein Git-Projekt, in dem ich ein anderes (SPSS) als Submodule eingebunden habe. Vor grob einer Woche habe ich mich entschlossen, das Submodule-Projekt durch seine neuere Variante zu ersetzen (SPSS-ng). Jetzt habe ich diese Konstellationen:

  • mein “main”-Zweig verwendet SPSS
  • mein “develop”-Zweig verwendet SPSS-ng

Der Wechsel zwischen den Zweigen erscheint nun etwas komplizierter!

TLDR: Nach git checkout zweigname noch diese beiden Kommandos ausführen:

  • git submodule update --init --recursive
  • git clean -dff

Zweigwechsel ohne Submodule

Wenn ich an einem Git-Projekt ohne Submodule arbeite oder wenn das Git-Projekt in allen Zweigen denselben Stand desselben Sobmodules verwendet, dann sind die Zweigwechsel ganz einfach:

  • Wechsel zum “develop”-Zweig: git checkout develop
  • Wechsel zum “main”-Zweig: git checkout main

Zweigwechsel mit Submodule

develop –> main

Kommandos:

1
2
3
4
git checkout main
git submodule update --init --recursive
git clean -dff
# Nun existiert SPSS, SPSS-ng ist gelöscht!

Hier noch die Mischung aus Ein- und Ausgaben:

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
$ git status
Auf Branch develop
Ihr Branch ist auf demselben Stand wie 'origin/develop'.

nichts zu committen, Arbeitsverzeichnis unverändert

$ git checkout main
warning: unable to rmdir 'SPSS-ng': Das Verzeichnis ist nicht leer
Zu Branch 'main' gewechselt
Ihr Branch ist auf demselben Stand wie 'origin/main'.

$ git submodule update --init --recursive
Submodul-Pfad: 'SPSS': 'abcd...' ausgecheckt

$ git clean -dff
Lösche SPSS-ng/
Auf Branch main
Ihr Branch ist auf demselben Stand wie 'origin/main'.

nichts zu committen, Arbeitsverzeichnis unverändert

$ git status
Auf Branch main
Ihr Branch ist auf demselben Stand wie 'origin/main'.

nichts zu committen, Arbeitsverzeichnis unverändert

main –> develop

Kommandos:

1
2
3
4
git checkout develop
git submodule update --init --recursive
git clean -dff
# Nun existiert SPSS-ng, SPSS ist gelöscht!

Hier noch die Mischung aus Ein- und Ausgaben:

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
$ git status
Auf Branch main
Ihr Branch ist auf demselben Stand wie 'origin/main'.

nichts zu committen, Arbeitsverzeichnis unverändert

$ git checkout develop
warning: unable to rmdir 'SPSS': Das Verzeichnis ist nicht leer
Zu Branch 'develop' gewechselt
Ihr Branch ist auf demselben Stand wie 'origin/develop'.

$ git submodule update --init --recursive
Submodul-Pfad: 'SPSS-ng': '9fe1...' ausgecheckt

$ git clean -dff
Lösche SPSS/
Auf Branch develop
Ihr Branch ist auf demselben Stand wie 'origin/develop'.

nichts zu committen, Arbeitsverzeichnis unverändert

$ git status
Auf Branch develop
Ihr Branch ist auf demselben Stand wie 'origin/develop'.

nichts zu committen, Arbeitsverzeichnis unverändert

Änderungen

  • 2021-11-07 – Erste Version