Git detached HEAD

Ein alter commit wurde heruntergeladen. Nun ist der Head losgelöst.

temporären Branch erstellen

git checkout -b develop2

Dadurch wird der losgelöste HEAD an den neuen Branch gebunden!
Als Überblick ev.  git diff master develop2 .

Branch Master zufügen
Danach normal weitergehen (mit diesem Branch),
oder den Branch zum Mater oder anderen Branch einbinden.

git branch -f master develop2
git checkout master
git branch -d develop2

.gitignore Hilfe

.gitignore bezieht sich nur auf <untracked files>.  Sie sind rot.
New Files (grün) sind bereits <add> und gitignore sieht sie nicht mehr.

File aus add-Liste nehmen

git reset HEAD <file>
git reset HEAD **/**/db/*

Die Files werden wieder rot und gelten als ausserhalb des commits.

Test Funktionsweise .gitignore
Ordner und Endungen, die in .gitignore stehen, sollten unter den <untracked files> erscheinen.
Wichtig: Änderungen in .gitignore müssen zuerst <add> werden, damit sie wirken.

Ordner ignorieren
In gitignore: <bla>/<bli>/<blo>/
Git kann Ordner nicht ignorieren, nur Dateien. Deshalb ist / am Ende zwingend.

Ordner relativ ignorieren

**/**/<blo>/

Die Anzahl Stufen müssen stimmen.
Achtung:
Bei allgemeinen Namen, können ungewollt andere Ordner betroffen sein. Deshalb lieber zwei Namen angeben, sodass es eindeutig wird.

Etwas aus ignoriertem Ordner hinzufügen

Cyclone_IV/synthese/db/*
! Cyclone_IV/synthese/db/<datei.xxx>

Ordner/* der Stern ist zwingend, damit nicht alles per se ignoriert wird. Nur so können unterhalb Dateien wieder zugefügt werden.

Git: wichtigste Befehle

Herunterladen

git fetch upstream

Herunterladen und zusammenführen mit local

git pull [origin master]  // fetch und merge


Dateien auf Github hochladen

git push [origin master]   // origin  bedeutet remote auf github
git push [ <ziel> <von wo>]

Unterscheidung remote/local
Github ist ein entferntes Verzeichnis auf dem Internet. Deshalb bezieht sich der Begriff remote auf Github. Steht nichts vor dem Branch-Name, so ist es local.

$git branch -a
*master     // local branch
develop     // local branch
remotes/origin/HEAD  -> origin/master
remotes/origin/master
remotes/origin/develop


Ordner umbenennen

git mv <old name> <new name>

 

Lokale Datei aus aktuellem Verzeichnis nehmen

Das Git-Verzeichnis befindet sich immer in einem Zustand. Dies ist eine spezifische Commit-Nummer. Will man eine Datei nicht mehr nachverfolgen, bedeutet dies, dass man die Datei aus diesem Arbeitsverzeichnis nimmt.

git remove <file>   Dieser Befehl ist das Gegenteil von

git add <file>

Git remove  bezieht sich nur auf das aktuelle Verzeichnis. Ist die Datei bereits eingechecked, so ist sie in alten Versionen noch da.

git_remove


Push auf Repository rückgängig machen

git log
git revert <beginn der aktuellen commit-nummer>

Der aktuelle Commit findet man mit git log. Danach kann man diesen commit mit revert rückgängig machen. Es besteht wieder der Zustand vor diesem commit.
git_log

Add  rückgängig machen

git reset HEAD <Verzeichnis>

Hat man lokal zuviel zum Committen getan, geht mit diesem Befehl die Datei zurück in untracked (und wird wieder rot).

Ordner aus Repository entfernen   (remote)

git rm -r --cached <directory>       
git commit -m "Ordner aus Github genommen" 
git push origin master

Hier wird der Ordner aus dem Repository genommen (dort gelöscht), aber lokal gelassen. Grund dafür ist die Zeile –cached.


Ordner aus Git entfernen (lokal und remote)

git rm -r <directory>
git status: deleted  <directory>
git add <directory>
git commit -m "löschen eines Ordners lokal und auf Github" 

Der Ordner existiert lokal nicht mehr. Soll er auch auf Github nicht mehr existieren, muss die Lösch-Meldung gepushed werden.


Alte Datei von Repository holen

git checkout <commit-nr> <pfad>/<file>

Achtung: Die Datei wird lokal genau nach Pfad abgelegt. Liegt dort eine aktuelle Datei, wird diese überschrieben. Man muss zuerst die akutelle Datei umbenennen.


Website mit wichtigsten Befehlen

Das Programm Git

Das Programm
– Git wurde von Linus Torvalds entworfen.
– Einziges Ziel von Git ist das Verwalten der Versionierung.
– löscht man die Git-Datei, löscht man nur die Versionierung. Die Dateien bleiben
– Git kann lokal gebraucht werden, wie auch über eine Plattform (z.B. Github).
– Git hat nichts mit Github zu tun

Versionierung lokal anlegen

git init
git add <Datei oder Ordner>

Versionierung remote anlegen

git clone git@github.com/<user>/projekt


Vergleich mit svn

– svn bedingt einen Server
– svn: Änderungen liegen auf dem Server <-> git: Änderungen lokal auf .git

Änderungen rückgängig machen (Git)

Nachlesen von Änderungen rückgängig machen
https://www.atlassian.com/git/tutorials/undoing-changes

File aus Ordner löschen
Die Datei bleibt physisch da, wird aber aus der Versionierung (aus git) genommen. Git sieht das File nicht mehr.

git rm <file>             


Lokale Änderung nicht comitten
– <untracked files> können mit gitignore vom committen ausgeschlossen werden
– wurde eine Datei bereits <add> so kann man git reset HEAD <file> das File aus der commit-Liste nehmen. (es wird dann wieder rot)

File auf alte Version zurücksetzen

git checkout --  <file>          // falscherweise commited
git checkout <commit-nr> <file>  // altes File holen
git reset <file>                 // falscherweise <add>

Der erste Befehl bezieht sich auf den letzten commit. Der zweite auf einen füheren. Achtung: in beiden Fällen wird das lokale File überschrieben!

 

Git <-> Github: Wo braucht man ein Passwort?

Git kümmert sich um die Versionierung.
Mit git status  sieht man, was geändert ist und kann es mit git add  git commit  auf auch auf eine Plattform ausserhalb senden.
Commits (und adds) sind nur lokal auf der Maschine. Sie brauchen keine Rechte. Denn Git muss nicht über eine Plattform gehen. Git kann auch nur lokal die Versionierung verwalten.

Github teilt Versionierung mit anderen
Will man Daten mit andern teilen, bietet sich eine Plattform wie Github an. Man braucht dazu jedoch Rechte von Gründer des Repositorys. Man hinterlegt seine Emailadresse sowie eine Form der Authentifizierung:
– per RSA-Key identifizieren (Github: Profile/Settings/SSH-Key) oder
– per Passwort.
Bei ersterem muss man beim Pushen nichts tun (der private Key authentifiziert), bei der Version mit dem Passwort, muss man immer das PW beim Pushen mitgeben.

Repository erstellen: Anleitung

Programme installieren
Git
– Github: Ist die GUI für unter Windows

Konto auf öffentlicher Plattform
– Auf einer Plattform (z. B. Github) Konto errichten (user, email, passwort)
– Öffentliche Plattform: Pullen darf jeder vom Projekt, ohne passwort
Pushen verlangt einen Namen und ein Passwort
– Repository ohne Lizenz: Man darf den Code nicht brauchen

Schritte lokale Synchronisation
– Auf Plattform den SSH-pfad kopieren
– lokal an Ort gehen, wo Hauptverzeichnis hinkommen soll.
Liegen bereits Ordner, dann diese wegkopieren und zuerst Repository anlegen
Windows:
Mit GUI Github auf + und dann Clone auswählen, Projekt anwäheln

git clone https://github.com/<user>/projektname.git

– Falls bestehende Ordner wegkopiert wurden, diese nun dem Projekt zufügen:
Windows:
Mit GUI Github auf + und add und die kopierten Dateien auswählen
der Committext kann direkt zugefügt werden

git status
git add <file>
git commit -m "text"

– gitignore ausfüllen

*~   für alle backupts
*o   für objektdateien

directory/**/*     ignoriert dieses Verzeichnis, ausser:
!directory/blabla/datei.xxx   ausser dieser Ordner oder diese Datei

– Daten hochladen aufs Repository
Windows:
Über sync (oben rechts)

git pull
git push

Repository löschen

rm -rf .git