Link Search Menu Expand Document

Lösung zu Schritt 1 - Module als Submodule einbinden

Binde die Module frontend.git und backend.git per submodule add ein. Untersuche dann die entstandene Verzeichnisstruktur.

application $ git submodule add  ../frontend.git frontend

Cloning into '/workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/application/frontend'...
done.

application $ git submodule add  ../backend.git backend

Cloning into '/workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/application/backend'...
done.

Man sieht, dass die Module als eigenständige Git-Repositorys mit separatem .git-Verzeichnis eingebettet wurden.

application $ ll frontend backend

backend:
total 4.0K
-rw-r--r-- 1 vscode vscode 181 service.java

frontend:
total 4.0K
-rw-r--r-- 1 vscode vscode 181 main.ts

Achtung! Die submodule wurden hinzugefügt, aber es fehlt noch ein Commit.

application $ git status

On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitmodules
new file: backend
new file: frontend


application $ git commit -m 'add frontend and backend'

[main f5a4fc3] add frontend and backend
3 files changed, 8 insertions(+)
create mode 100644 .gitmodules
create mode 160000 backend
create mode 160000 frontend

Lösung zu Schritt 2 - Änderung aus einem Modul übernehmen

Gehe in das Repo backend ändere die Datei service.java, committe und pushe. Sie Dir das entstandene Commit an (show --stat) Gehe in das Repo application/backend und hole die Änderungen per pull ab. Sieh Dir das übertragene Commit an.

$ cd backend


backend $ # Edit file service.java at line 8 on branch main by bjoern.


backend $ git commit -am "`service.java`: Edit file service.java at line 8 on branch main by bjoern. "

[main 5465a06] : Edit file service.java at line 8 on branch main by bjoern.
1 file changed, 1 insertion(+), 1 deletion(-)
/bin/bash: line 1: service.java: command not found

backend $ git show --stat 

commit 5465a0638bf7e6f63a41baded2cf6cf770d6b659
Author: bjoern <kapitel26blog@gmail.com>
Date: Thu Jul 29 00:00:00 2021 +0000

: Edit file service.java at line 8 on branch main by bjoern.

service.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

backend $ git push

To ../backend.git
005d8aa..5465a06 main -> main

backend $ cd ..


$ cd application


application $ cd backend


backend $ git pull

Updating 005d8aa..5465a06
Fast-forward
service.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From /workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/backend
005d8aa..5465a06 main -> origin/main

backend $ cd ..


application $ git add backend


application $ git commit -am 'updated backend'

[main eaf467e] updated backend
1 file changed, 1 insertion(+), 1 deletion(-)

application $ cd ..


Lösung zu Schritt 3 - Änderung in ein Modul übertragen

Gehe in subtrees/frontend ändere main.ts und committe. Übertrage die Änderung per push nach frontend.git. Sieh Dir das übertragene Commit in frontend.git an.

$ cd application


application $ cd frontend


frontend $ # Edit file main.ts at line 5 on branch main by bjoern.


frontend $ git commit -am "`main.ts`: Edit file main.ts at line 5 on branch main by bjoern. "

[main 357f243] : Edit file main.ts at line 5 on branch main by bjoern.
1 file changed, 1 insertion(+), 1 deletion(-)
/bin/bash: line 1: main.ts: command not found

frontend $ git push

To /workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/frontend.git
03baf80..357f243 main -> main

frontend $ cd ..


Nicht vergessen: Änderungen am im übergeordenten Repository committen.

application $ git add frontend


application $ git commit -m 'new version of frontend'

[main 8a4ffa3] new version of frontend
1 file changed, 1 insertion(+), 1 deletion(-)

application $ cd ..


$ cd frontend.git


frontend.git $ git show --stat 

commit 357f243ea0f6d3c6f832fb0e0f41743e44376a61
Author: bjoern <kapitel26blog@gmail.com>
Date: Thu Jul 29 00:00:00 2021 +0000

: Edit file main.ts at line 5 on branch main by bjoern.

main.ts | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

frontend.git $ cd ..


Lösung zu Schritt 4 - Übergeordnetes Repo klonen

Klone application zu myapplication. Untersuche die Verzeichnisstruktur. Vergiß nicht, ein submodule update auszuführen.

$ git clone application myapplication

Cloning into 'myapplication'...
done.

$ cd myapplication


Die Modulverzeichnisse sind da aber noch leer:

myapplication $ ll frontend backend

backend:
total 0

frontend:
total 0

Jetzt holen wir die Module:

myapplication $ git submodule update --init

Submodule path 'backend': checked out '5465a0638bf7e6f63a41baded2cf6cf770d6b659'
Submodule path 'frontend': checked out '357f243ea0f6d3c6f832fb0e0f41743e44376a61'
Submodule 'backend' (/workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/backend.git) registered for path 'backend'
Submodule 'frontend' (/workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/frontend.git) registered for path 'frontend'
Cloning into '/workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/myapplication/backend'...
done.
Cloning into '/workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-submodules/myapplication/frontend'...
done.

myapplication $ ll frontend backend

backend:
total 4.0K
-rw-r--r-- 1 vscode vscode 249 service.java

frontend:
total 4.0K
-rw-r--r-- 1 vscode vscode 244 main.ts

myapplication $ cd ..


Zur Aufgabe

Zum Überblick