[ Prev ] [ Index ] [ Next ]

TroLUG-Vortrag git

Created Thursday 15 October 2015


xkcd-Comic: http://xkcd.com/1597/

----------------------------------------------------------

Teil 1: Vom Verzeichnis zum Commit

----------------------------------------------------------

Konfiguration und Einrichtung

git config --global user.name <Name>
git config --global user.email <mail@adresse.de>
git config --global core.editor vim

Neues Projekt anlegen

Im entsprechenden Verzeichnis:

git init

Dateien ignorieren

Im working directory gibt es die Datei .gitignore . Darin z.B. die Zeile

*.o

einfügen, und alle *.o-Dateien werden bei "git add --all" ignoriert.

Eine Momentaufnahme vom Verzeichnis machen

git add --all

Die Momentaufnahme als "Commit" abspeichern

git commit

----------------------------------------------

Teil 2: Arbeiten mit Commits

----------------------------------------------

Historie anzeigen lassen

git log --all --oneline --graph --decorate

Damit man nicht den langen log-Befehl eingeben muß, macht man sich einen Alias:

git config --global alias.lg 'log --all --oneline --graph 

--decorate'

Was passiert beim Befehl "git commit"?


 HEAD
  |
  v 
 master
  | 
  v
 ----
| C1 |
 ----

git commit

           HEAD
            |
            v
          master
            | 
            v
 ----      ----
| C1 |<---| C2 |
 ----      ----

Der Branch "master" ist ein Zeiger auf den Commit C2. HEAD ist ein Zeiger auf den aktuellen Branch (hier "master").

Einen neuen Branch erzeugen


           HEAD
            |
            v
          master
            | 
            v
 ----      ----
| C1 |<---| C2 |
 ----      ----

git branch testing

           HEAD
            |
            v
          master
            | 
            v
 ----      ----
| C1 |<---| C2 |
 ----      ----
            ^
            |
          testing

Den Branch wechseln

           HEAD
            |
            v
          master
            | 
            v
 ----      ----
| C1 |<---| C2 |
 ----      ----
            ^
            |
          testing

git checkout testing


          master
            | 
            v
 ----      ----
| C1 |<---| C2 |
 ----      ----
            ^
            |
          testing
            ^
            |
           HEAD

Das Projekt verzweigen:

           HEAD
            |
            v
          master
            | 
            v
 ----      ----
| C1 |<---| C2 |
 ----      ----
            ^
            |
          testing

git commit

                     HEAD
                      |
                      v
                    master
                      | 
                      v
 ----      ----      ----
| C1 |<---| C2 |<---| C3 |
 ----      ----      ----
            ^
            |
          testing

git checkout testing

                    master
                      | 
                      v
 ----      ----      ----
| C1 |<---| C2 |<---| C3 |
 ----      ----      ----
            ^
            |
          testing
            ^
            |
           HEAD

git commit

                    master
                      | 
                      v
                    ----
                   | C3 |
                    ----
                    /
 ----      ----  <-/
| C1 |<---| C2 |
 ----      ----  <-\
                    \
                    ----
                   | C4 |
                    ----
                     ^
                     |
                  testing
                     ^
                     |
                    HEAD

Fast-forward-Merge

           HEAD
            |
            v
          master    hotfix
            |         |
            v         v
 ----      ----      ----
| C1 |<---| C2 |<---| C3 |
 ----      ----      ----

git merge hotfix

                     HEAD
                      |
                      v      
               hotfix = master
                      |
                      v
 ----      ----      ----
| C1 |<---| C2 |<---| C3 |
 ----      ----      ----

Three-Way-Merge

                    HEAD
                     |
                     v
                   master
                     | 
                     v
                    ---- 
                   | C3 |
                    ----      
                    /
 ----      ----  <-/
| C1 |<---| C2 |
 ----      ----  <-\
                    \
                    ----      ----
                   | C4 |<---| C5 |
                    ----      ----
                               ^
                               |
                             testing

C2 ist der gemeinsame Vorfahre.

git merge testing


                                          HEAD
                                           |
                    ----                   v
                   | C3 |<-----------\   master
                    ----              \    |
                    /                  \   v
 ----      ----  <-/                    \ ----
| C1 |<---| C2 |                         | C6 |
 ----      ----  <-\                    / ----
                    \                  /
                    ----      ----    /
                   | C4 |<---| C5 |<-/
                    ----      ----
                               ^
                               |
                             testing

Rebase

                   master
                     | 
                     v
                    ---- 
                   | C3 |
                    ----      
                    /
 ----      ----  <-/
| C1 |<---| C2 |
 ----      ----  <-\
                    \
                    ----      ----
                   | C4 |<---| C5 |
                    ----      ----
                               ^
                               |
                             testing
                               ^
                               |
                              HEAD

git rebase master

                    master
                      |
                      v
 ----      ----      ----      -----      -----
| C1 |<---| C2 |<---| C3 |<---| C4' |<---| C5' |
 ----      ----      ----      -----      -----
                                            ^
                                            |
                                          testing
                                            ^
                                            |
                                           HEAD

C4' und C5' unterscheiden sich von C4 und C5. C5' ist identisch mit C6 im Beispiel "Three way merge".

-----------------------------------------------------

Teil 3: Austausch mit dem Server

-----------------------------------------------------

Clone

________Server__________
|                      |
|           master     |
|             |        |
|             v        |
|  ----      ----      |
| | C0 |<---| C1 |     |
|  ----      ----      |
|______________________|

**Alice$ git clone https://server.com/myproject**

________Server__________   ____________Alice__________
|                      |   |                         |
|           master     |   |           origin/master |
|             |        |   |              |          |
|             v        |   |              v          |
|  ----      ----      |   |  ----       ----        |
| | C0 |<---| C1 |     |   | | C0 | <---| C1 |       |
|  ----      ----      |   |  ----       ----        |
|______________________|   |              ^          |
                           |              |          |
                           |            master       |
                           |_________________________|

Pull (fetch und merge)

(Auf dem Server wurde master inzwischen von jemand anderem weiterentwickelt. Alice weiß noch nichts davon, hat aber in der Zwischenzeit auch etwas getan.)

___________Server_____________   ______________Alice_______________
|                            |   |                                |
|                     master |   |        origin/master           |
|                       |    |   |              |                 |
|                       v    |   |              v                 |
|  ----      ----      ----  |   |  ----       ----      ----     |
| | C0 |<---| C1 |<---| C2 | |   | | C0 | <---| C1 |<---| C3 |    |
|  ----      ----      ----  |   |  ----       ----      ----     |
|____________________________|   |                        ^       |
                                 |                        |       |
                                 |                      master    |
                                 |                        ^       |
                                 |                        |       |
                                 |                       HEAD     |
                                 |________________________________|

Alice$ git fetch origin

___________Server_____________   _________________Alice_______________
|                            |   |                                   |
|                     master |   |                     origin/master |
|                       |    |   |                         |         |
|                       v    |   |                         v         |
|  ----      ----      ----  |   |                        ----       |
| | C0 |<---| C1 |<---| C2 | |   |                     /-| C2 |      |
|  ----      ----      ----  |   |                    /   ----       |
|____________________________|   |  ----      ---- <-/               |
                                 | | C0 |<---| C1 |                  |
                                 |  ----      ---- <-\               |
                                 |                    \   ----       |
                                 |                     \-| C3 |      |
                                 |                        ----       |
                                 |                         ^         |
                                 |                         |         |
                                 |                       master      |
                                 |                         ^         |
                                 |                         |         |
                                 |                        HEAD       |
                                 |___________________________________|

Alice$ git merge origin/master

___________Server_____________   ____________________Alice___________________
|                            |   |                                          |
|                     master |   |                     origin/master        |
|                       |    |   |                         |                |
|                       v    |   |                         v                |
|  ----      ----      ----  |   |                        ----              |
| | C0 |<---| C1 |<---| C2 | |   |                     /-| C2 |<-\          |
|  ----      ----      ----  |   |                    /   ----    \         |
|____________________________|   |  ----      ---- <-/             \  ----  |
                                 | | C0 |<---| C1 |                  | C4 | |
                                 |  ----      ---- <-\             /  ----  |
                                 |                    \   ----    /    ^    |
                                 |                     \-| C3 |<-/     |    |
                                 |                        ----       master |
                                 |                                     ^    |
                                 |                                     |    |
                                 |                                    HEAD  |
                                 |__________________________________________|

Push (auf vorhandenen Branch)

___________Server_____________   ______________Alice_______________
|                            |   |                                |
|           master           |   |        origin/master           |
|             |              |   |              |                 |
|             v              |   |              v                 |
|  ----      ----            |   |  ----       ----      ----     |
| | C0 |<---| C1 |           |   | | C0 | <---| C1 |<---| C2 |    |
|  ----      ----            |   |  ----       ----      ----     |
|____________________________|   |                        ^       |
                                 |                        |       |
                                 |                      master    |
                                 |                        ^       |
                                 |                        |       |
                                 |                       HEAD     |
                                 |________________________________|

Alice$ git push

___________Server_____________   ______________Alice_______________
|                            |   |                                |
|                     master |   |                  origin/master |
|                       |    |   |                        |       |
|                       v    |   |                        v       |
|  ----      ----      ----  |   |  ----       ----      ----     |
| | C0 |<---| C1 |<---| C2 | |   | | C0 | <---| C1 |<---| C2 |    |
|  ----      ----      ----  |   |  ----       ----      ----     |
|____________________________|   |                        ^       |
                                 |                        |       |
                                 |                      master    |
                                 |                        ^       |
                                 |                        |       |
                                 |                       HEAD     |
                                 |________________________________|

Push (neuen Branch erzeugen)

___________Server_____________   ______________Alice__________________
|                            |   |                                   |
|                     master |   |                     origin/master |
|                       |    |   |                           |       |
|                       v    |   |                           v       |
|  ----      ----      ----  |   |  ----       ----         ----     |
| | C0 |<---| C1 |<---| C2 | |   | | C0 | <---| C1 |<------| C2 |    |
|  ----      ----      ----  |   |  ----       ---- <-\     ----     |
|____________________________|   |                    |      ^       |
                                 |                    |      |       |
                                 |                    |    master    |
                                 |                    |      ^       |
                                 |                    |      |       |
                                 |                    |     HEAD     |
                                 |                     \             |
                                 |                      \   ----     |
                                 |                       \-| C3 |    |
                                 |                          ----     |
                                 |                           ^       |
                                 |                           |       |
                                 |                        testing    |
                                 |___________________________________|

Alice$ git push origin testing:testing_alice

___________Server_______________   ______________Alice__________________
|                              |   |                                   |
|                       master |   |                     origin/master |
|                         |    |   |                           |       |
|                         v    |   |                           v       |
|  ----      ----        ----  |   |  ----       ----         ----     |
| | C0 |<---| C1 |<-----| C2 | |   | | C0 | <---| C1 |<------| C2 |    |
|  ----      ---- <-\    ----  |   |  ----       ---- <-\     ----     |
|                    \   ----  |   |                    |      ^       |
|                     \-| C3 | |   |                    |      |       |
|                        ----  |   |                    |    master    |
|                         ^    |   |                    |      ^       |
|                         |    |   |                    |      |       |
|                testing_alice |   |                    |     HEAD     |
|                              |   |                     \             |
|______________________________|   |                      \   ----     |
                                   |                       \-| C3 |    |
                                   |                          ----     |
                                   |                           ^       |
                                   |                           |       |
                                   |                        testing    |
                                   |___________________________________|

Push (remote Branch löschen)

___________Server_______________   ______________Alice__________________
|                              |   |                                   |
|                       master |   |                     origin/master |
|                         |    |   |                           |       |
|                         v    |   |                           v       |
|  ----      ----        ----  |   |  ----       ----         ----     |
| | C0 |<---| C1 |<-----| C2 | |   | | C0 | <---| C1 |<------| C2 |    |
|  ----      ---- <-\    ----  |   |  ----       ---- <-\     ----     |
|                    \   ----  |   |                    |      ^       |
|                     \-| C3 | |   |                    |      |       |
|                        ----  |   |                    |    master    |
|                         ^    |   |                    |      ^       |
|                         |    |   |                    |      |       |
|                testing_alice |   |                    |     HEAD     |
|                              |   |                     \             |
|______________________________|   |                      \   ----     |
                                   |                       \-| C3 |    |
                                   |                          ----     |
                                   |                           ^       |
                                   |                           |       |
                                   |                        testing    |
                                   |___________________________________|

Alice$ git push origin :testing_alice

___________Server_____________   ______________Alice__________________
|                            |   |                                   |
|                     master |   |                     origin/master |
|                       |    |   |                           |       |
|                       v    |   |                           v       |
|  ----      ----      ----  |   |  ----       ----         ----     |
| | C0 |<---| C1 |<---| C2 | |   | | C0 | <---| C1 |<------| C2 |    |
|  ----      ----      ----  |   |  ----       ---- <-\     ----     |
|____________________________|   |                    |      ^       |
                                 |                    |      |       |
                                 |                    |    master    |
                                 |                    |      ^       |
                                 |                    |      |       |
                                 |                    |     HEAD     |
                                 |                     \             |
                                 |                      \   ----     |
                                 |                       \-| C3 |    |
                                 |                          ----     |
                                 |                           ^       |
                                 |                           |       |
                                 |                        testing    |
                                 |___________________________________|

Backlinks: git

Attachments:
screenshot_2016-05-10-131846.png 57.9kb