GIT installieren und mit Github synchronisieren

in #github4 years ago

Git und Github sind mächtige Tools um Code mit Versionen und Nebenversionen (Branches) zu verwalten und mit anderen auszutauschen. Sie synchronisieren den lokalen Code mit dem Teil, der auf Github.com und damit in der Cloud liegt.

Ich bin meine ersten Schritte mit Git und Github gegangen und habe sie hier dokumentiert:

Inhalt

  • Vorbereitung
  • Lokalen Projektordner erstellen
  • Der Diff Befehl
  • Restore
  • Branch erstellen
  • Löschen in Git mit "git rm"
  • Mergen aus verschiedenen Branches
  • Quellen

Vorbereitung

Git runterladen und installieren:
https://git-scm.com/download/win

tortoiseGit runderladen und installieren (optional)
https://tortoisegit.org/download/

Auf Github.com registrieren:
image.png


Lokalen Projektordner erstellen

Projektordner im Windows erstellen:
image.png
Diesen Ordner für Git initiieren:
Git Bash aufrufen, in den Projekt Ordner wechseln und git init eingeben:

$ git init

image.png
Das ist jetzt unser Workspace.
Aber es ist noch nichts im Repository. Dazu muss man die Datei zuerst "vorbereiten" mit dem add Befehl:

$ git add blabla.txt

Man kann auch mehrere Dateien (auch rekursiv) gleichzeitig hinzufügen:

$ git add *

Wenn man wissen will, welche Dateien noch nicht "geadded" sind, hilft der Befehl

$ git status

image.png

Um das nun hochzuladen, erstelle ich auf Github einen neuen Repository:
image.png
image.png
Nun verbinde ich Github mit meinem Workspace:

git config --global user.email "[email protected]" <- That has to be done once
git config --global user.name "achimmertens" <- That has to be done once

Jetzt kann es dem GIT System durch ein Commit (Bestätigen) zugefügt werden:

$ git commit -m "Mein erster Commit"
[master (root-commit) 4531ecb] Mein erster Commit
2 files changed, 3 insertions(+)
create mode 100644 blabla.txt.txt
create mode 100644 blub.txt

Folgender Befehl muss einmalig für das Projekt ausgeführt werden:

$ git remote add origin https://github.com/achimmertens/Projekt1.git

Und mit "git push" wird nach Github hochgeladen:

$ git push -u origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 288 bytes | 96.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/achimmertens/Projekt1.git
'* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

Ab jetzt gilt der Dreiklang um etwas Neues zu integrieren und hochzuladen:

  • add
  • commit
  • push

Der Diff Befehl

Er zeigt den Unterschied zwischen meiner lokalen Datei und der auf dem Repository an:

$ git diff
diff --git a/index.html b/index.html
index 4da085a..ca955bf 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,14 @@


Restore

Mit folgendem Befehl bekomme ich die Letzte Version aus dem Repository auf meinen Workspace zurück.

$ git reset --hard HEAD

Hard bedeutet, es wird brutal überschrieben.
HEAD ist die letzte Version.

Dies brachte meine zuvor gelöschte Datei "blabla.txt.txt" wieder zurück.

Möchte ich eine ältere Version haben, brauch ich erst mal die Versionsnummer. Die bekomme ich mit dem Befehl "log"
image.png
HEAD is now at 31b06c6 (Es reicht aus die ersten Ziffern zu bennnen): "Meine erste Index.html-Seite, hangeschrieben"

Ich möchte die Readme-Datei zurück holen. Sie hat die Commitnummer: 40c2342a05ab7b7af2450b47d22a3ae09d1b4388
Der Befehl lautet daher:

$ git checkout 40c2342a05ab7b7af2450b47d22a3ae09d1b4388
Note: switching to '40c2342a05ab7b7af2450b47d22a3ae09d1b4388'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 40c2342 Create README.md
M README.md

Diese Meldung besagt, dass die Version jetzt so irgendwo vor sich hin dümpelt, aber keinem Branch zugeordnet ist.

!!! Vorsicht!!!
Ich habe nun die komplette Version zurückgespielt. Nicht nur meine readme-Datei (die, warum auch immer, immer noch in der falschen Version lokal da ist), sondern auch alle anderen Änderungen sind jetzt wieder in der alten Version. D.h. meine index.html ist jetzt weg.

Besser is es nun, einen neuen Branch zu erstellen, der gemischte Versionen ermöglicht:


Branch erstellen

Zuerst bewege ich mich mit dem Checkout Befehl in die Version, die ich leicht abändern möchte:

$ git checkout 31b06c65e27acd09b84ec38b5dff0b4ef3399b4e

Nun erstelle ich einen neuen Branch:

$ git checkout -b "Version_mit_index.html"
Switched to a new branch 'Version_mit_index.html'

Damit das Ganze auch auf dem Repository landet muss jetzt mindestens eine Änderung durchgeführt und anschließend committed werden.

$ git add README.md

Auf Github sieht das jetzt so aus:
image.png

Und auf dem lokalen PC so:
image.png

Mit dem Befehl

$ git log --all --graph --online

kann man erkennen, welche Version gerade aktiv ist (wo der HEAD gerade ist).
Für den Branch "Master" sieht es so aus:
image.png
Man achte auf den HEAD, also die jeweils letzte Version. Er ist quasi der Zeiger der Branches auf die entsprechende Version.


git rm und git status

Mit dem Befehl

$ git rm

kann ich Dateien löschen:
image.png

Mit

$ git status

sehe ich alle Änderungen seit dem letzten commit oder checkout.
Mit

$ git reset --hard HEAD

komme ich wieder zu meinem Ausgangszustand zurück:
image.png


Mergen aus verschiedenen Branches

Weil es so schön ist, erstelle ich einen neuen Branch und füge dort eine Datei "gustav.txt" hinzu:
image.png

... und natürlich noch hochladen (Wir erinnern uns: "add, commit, push")
image.png
Jetzt erstelle ich nochmal eine vernünftige Indexdatei im Branch "Version_mit_Index.html".
Ich habe zwar ein Checkout in den Branch "Version_mit_Index.html" gemacht und auch dort hinein eine Datei erstellt (mit git add), dennoch ist nach dem Committen eine eigene, keinem Branch zugeordnete Version entstanden (Qaadc95):
image.png
Um es in den richtigen Branch zu pushen, sieht der Befehl wie folgt aus:

$ git push origin HEAD:Version_mit_index.html

image.png

Ich möchte nun die Änderungen aus dem "Nebenbranch" "Version_mit_index.html" in den Masterbranch mergen. Dazu wechsel ich in den Masterbranch und merge von der Quelle "0aadc95", wo der HEAD Zeiger liegt und wo auch die index.html zuletzt geändert wurde:

$ git merge 0aadc95

image.png
Und jetzt hole ich auch noch die Gustavdatei in den Masterbranch. Nun ist es kein Fast Forward Merge mehr, da auch der Masterbranch Änderungen erfahren hat. Deshalb muss man mit dem vi-Editor noch etwas Text einfügen (mit :wq speichert man)
image.png
image.png
Und natürlich den Push nicht vergessen, damit alles auch auf Github landet:
image.png


Quellen:

Git Crashcurs [001] - Was ist Git + ff

Sort:  

Du hast ein Upvote von mir bekommen, diese soll die Deutsche Community unterstützen. Wenn du mich unterstützten möchtest, dann sende mir eine Delegation. Egal wie klein die Unterstützung ist, Du hilfst damit der Community. DANKE!