Link Search Menu Expand Document

Lösung zu Schritt 1 - Zusammenführen git subtree

  1. Erstelle ein Repo application mit einem Commit.
  2. Füge backend.git in einem Unterverzeichnis backend hinzu.
  3. Füge ui.git in einem Unterverzeichnis ui hinzu.
  4. 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 ..


Zur Aufgabe

Zum Überblick