Lösung zu Schritt 1 - Zusammenführen git subtree
- Erstelle ein Repo
application
mit einem Commit. - Füge
backend.git
in einem Unterverzeichnisbackend
hinzu. - Füge
ui.git
in einem Unterverzeichnisui
hinzu. - Untersuche Verzeichnissstruktur und Commit-Graphen
$ git init -b main application
Initialized empty Git repository in /workspaces/git-workshop/build/git-uebungen/loesungen/modularisierung-repositorys-zusammenfuehren/application/.git/
$ cd application
Wir erzeugen ein erstes Commmit, damit der subtree
-Befehl ausgeführt werden kann.
application $ # created file 'README'
application $ git add README
application $ git commit -am "Created file README on branch main by bjoern. "
[main (root-commit) 74f11b3] Created file README on branch main by bjoern.
1 file changed, 12 insertions(+)
create mode 100644 README
Dann fügen wir die Repos mit subtree
hinzu:
application $ git subtree add --prefix=backend ../backend.git main
git fetch ../backend.git main
From ../backend
* branch main -> FETCH_HEAD
Added dir 'backend'
application $ git subtree add --prefix=ui ../ui.git main
git fetch ../ui.git main
From ../ui
* branch main -> FETCH_HEAD
Added dir 'ui'
Man sieht ui und backend wurden mitsamt Historie zusammengeführt:
application $ git ls-tree -r --name-only HEAD
README
backend/src/Backend.java
backend/test/BackendTest.java
ui/src/UI.java
ui/test/UITest.java
application $ git log --oneline --graph
* f04721f Add 'ui/' from commit '5791af8bb65732c78dd9802fdac6bfe0aa218ced'
|\
| * 5791af8 Created file UITest.java on branch main by bjoern.
| * 292845b Created file UI.java on branch main by bjoern.
* 05a8fee Add 'backend/' from commit '4abbae294702c64cd9532bf814f7cb76db9fb963'
|\
| * 4abbae2 Created file BackendTest.java on branch main by bjoern.
| * 9ed7ede Created file Backend.java on branch main by bjoern.
* 74f11b3 Created file README on branch main by bjoern.
application $ cd ..
Lösung zu Schritt 2 - Zusammenführen mit fetch
, mv
und merge
UI und Backend sollen in einem neuen Klon gesamt
zusammengeführt werden. Folge den Anweisungen im Kapitel “Kleine Projekte zusammenführen”. Untersuche dann Verzeichnissstruktur und Commit-Graphen
$ git clone backend gesamt
Cloning into 'gesamt'...
done.
$ cd gesamt
Backend-Dateien in Unterverzeichnis verschieben:
gesamt $ mkdir backend
gesamt $ git mv src test backend
gesamt $ git commit -m 'backend-Verzeichnis angelegt'
[main 0487992] backend-Verzeichnis angelegt
2 files changed, 0 insertions(+), 0 deletions(-)
rename {src => backend/src}/Backend.java (100%)
rename {test => backend/test}/BackendTest.java (100%)
Inhalt des UI-Repository in einen lokalen Branch uimain
holen:
gesamt $ git remote add ui ../ui/
gesamt $ git fetch ui
From ../ui
* [new branch] main -> ui/main
gesamt $ git switch -c uimain ui/main
branch 'uimain' set up to track 'ui/main'.
Switched to a new branch 'uimain'
UI-Dateien in Unterverzeichnis verschieben:
gesamt $ mkdir ui
gesamt $ git mv src test ui
gesamt $ git commit -m 'ui-Verzeichnis angelegt'
[uimain 43e14db] ui-Verzeichnis angelegt
2 files changed, 0 insertions(+), 0 deletions(-)
rename {src => ui/src}/UI.java (100%)
rename {test => ui/test}/UITest.java (100%)
uimain
integrieren:
gesamt $ git switch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Switched to branch 'main'
gesamt $ git merge uimain --allow-unrelated-histories
Merge made by the 'ort' strategy.
ui/src/UI.java | 12 ++++++++++++
ui/test/UITest.java | 12 ++++++++++++
2 files changed, 24 insertions(+)
create mode 100644 ui/src/UI.java
create mode 100644 ui/test/UITest.java
Man sieht ui und backend wurden mitsamt Historie zusammengeführt:
gesamt $ git ls-tree -r --name-only HEAD
backend/src/Backend.java
backend/test/BackendTest.java
ui/src/UI.java
ui/test/UITest.java
gesamt $ git log --oneline --graph
* dc42d8d Merge branch 'uimain'
|\
| * 43e14db ui-Verzeichnis angelegt
| * 5791af8 Created file UITest.java on branch main by bjoern.
| * 292845b Created file UI.java on branch main by bjoern.
* 0487992 backend-Verzeichnis angelegt
* 4abbae2 Created file BackendTest.java on branch main by bjoern.
* 9ed7ede Created file Backend.java on branch main by bjoern.
gesamt $ cd ..