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 ..