Was ich so treibe...

Uli's IT-Blog - Konzeption, Entwicklung, Betrieb

GitHub-Projekt spalten am Beispiel Moxie

Im diesem Artikel hab’ ich erstmals kurz zusammengefasst, wie ich mit Forks von GitHub arbeite. Hier folgen nun mehr Details am konkreten Beispiel “moxie”.

GitHub-Projekt spalten (fork)

Lokalen Kopie anlegen (clone)

Gespaltenes Projekt kopieren mit: git clone <clone-url-s>, also im konkreten Fall git clone git@github.com:uli-heller/moxie.git:

Lokale Kopie anlegen
1
2
3
4
5
6
7
8
~/git$ git clone git@github.com:uli-heller/moxie.git
Klone nach 'moxie'...
remote: Counting objects: 11313, done.
remote: Compressing objects: 100% (2961/2961), done.
remote: Total 11313 (delta 6316), reused 11137 (delta 6140)
Empfange Objekte: 100% (11313/11313), 71.63 MiB | 1.60 MiB/s, done.
Löse Unterschiede auf: 100% (6316/6316), done.
Prüfe Konnektivität... Fertig

Original-Projekt einbinden (upstream)

Original-Projekt einbinden
1
2
3
4
5
6
~/git$ cd moxie
~/git/moxie$ git remote add upstream 
~/git/moxie$ git fetch upstream
Von https://github.com/gitblit/moxie
 * [neuer Branch]    gh-pages   -> upstream/gh-pages
 * [neuer Branch]    master     -> upstream/master

Kopie des Original-Projektes aktualisieren

Original-Projekt aktualisieren
1
2
3
4
5
6
~/git/moxie$ git fetch upstream 
remote: Counting objects: 1, done.
remote: Total 1 (delta 0), reused 1 (delta 0)
Unpacking objects: 100% (1/1), done.
Von https://github.com/gitblit/moxie
   e1c5785..a13973e  master     -> upstream/master

Änderungen des Original-Projektes einarbeiten

Gelegentlich will man die Änderungen des Original-Projektes in das abgespaltete Projekt einarbeiten. Vor der Einarbeitung muß die Kopie des Original-Projektes aktualisiert worden sein (git fetch upstream).

Nur eigene Pull-Requests

Hier der Ablauf, wenn am Original-Projekt zwischenzeitlich nur eigene Pull-Requests eingearbeitet wurden. Die Aktualisierung läuft in diesem Falle völlig schmerzfrei!

Original-Projekt einarbeiten
1
2
3
4
5
6
7
8
~/git/moxie$ git checkout master
Gewechselt zu Branch 'master'
~/git/moxie$ git merge --no-commit upstream/master
Aktualisiere 34b618c..a13973e
Fast-forward
~/git/moxie$ git status
# Auf Branch master
nichts zu committen, Arbeitsverzeichnis unverändert

Konflikte

Wenn am Original-Projekt zwischenzeitlich auch andere Änderungen gemacht wurden, so kommt es gelegentlich zu Konflikten beim Einarbeiten. Die Konflikte können mit git mergetool aufgelöst werden. Wichtig: Vor dem abschließenden git commit sollte der neue Stand ausführlich getestet werden!

Original-Projekt einarbeiten
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
~/git/moxie$ git checkout master
Gewechselt zu Branch 'master'
~/git/moxie$ git merge --no-commit upstream/master
## Hier muß ich noch die "richtigen" Meldungen einpflegen
automatischer Merge von Rakefile
automatischer Merge von Gemfile.lock
automatischer Merge von Gemfile
automatischer Merge von .ruby-version
KONFLIKT (hinzufügen/hinzufügen): Merge-Konflikt in .ruby-version
Entferne .rbenv-version
Automatischer Merge fehlgeschlagen; beheben Sie die Konflikte und committen Sie dann das Ergebnis.
~/git/moxie$ git mergetool
## Hier muß ich noch die "richtigen" Meldungen einpflegen
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse ecmerge p4merge araxis bc3 codecompare emerge vimdiff
Merging:
.ruby-version

Normal merge conflict for '.ruby-version':
  {local}: created file
  {remote}: created file
Hit return to start merge resolution tool (meld): meld
~/git/moxie$ git commit -m "Merged..."

Links

Comments