Git Basics: checkout – der aktuelle Zustand, auf den sich Änderungen beziehen

Das Verzeichnis befindet sich in einem Zustand. Dieser hat eine Commit-Nummer. Dieser Ort wird mit checkout benannt. Der Head-Pfeil zeigt immer auf die aktuell gültige Zustandsversion.

Bild 1 zeigt, dass der aktuelle Zustand des git Verzeichnisses 111 ist und dass Änderungen vorgenommen wurden.

git

 

Bild 2 zeigt, dass wenn Änderungen übermittelt werden, checkout sich auf den neuen Commit bezieht. Auch der Head zeigt zum neuen Commit.

shell / ./ . etc

/

cd /Verzeichnis/

Der Pfad beginnt  „ab root“

————————————————————————————-

./

./temp/

Bedeutet, dass der Pfad im „aktuellen Verzeichnis“ beginnt.
./ ist gleichbedeutet mit ganz weglassen:  temp/

————————————————————————————-

.

Ist keine Pfadangabe. Der Punkt versteckt die Datei.

 .datei.txt       -> unsichtbare Datei

Makefile

 

 # the compiler: gcc for C program, define as g++ for C++
  CC = gcc

  # compiler flags:
  #  -g    adds debugging information to the executable file
  #  -Wall turns on most, but not all, compiler warnings
  CFLAGS  = -g -Wall

  # the build target executable:
  TARGET = myprog

  all: $(TARGET)

  $(TARGET): $(TARGET).c
     $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).c

  clean:
          $(RM) $(TARGET)

Makefiles kann man mit Cmake automatisch generieren lassen.

ASCII-File to Binary-File

edid.txt
Eine Binärdatei, die in hex eingelesen wurde:

00 FF FF FF FF FF FF 00 4D D9 01 08 01 01 01 01 
01 11 01 03 80 A0 5A 78 0A 0D C9 A0 57 47 98 27 
12 48 4C 21 08 00 01 01 01 01 01 01 01 01 01 01

Konvertieren zu edid.bin

cat edid.txt | xxd -r -p > edid.bin

xxd ist ein Programm. Das andere ist hexdump

Git Basics: drei Dateizustände bei der Verfolgung

Jedes Git-Verzeichnis befindet sich in einem bestimmten Zustand. Dieser Zustand hat eine Commit-Nummer.

Nimmt man Änderungen aktuellen Verzeichnis vor, so können sich die Dateien in einem der nachfolgenden drei Zustände befinden:

git_3_stages

  • Eine Datei, die nachverfolgt wird hat sich geändert:  Sie ist im Zustand modified
    Mit dem Befehl git add  wird die Änderung zum weiteren verfolgen vorgemerkt. Die Datei hat einen Index. Ihr neuer Zustand ist:
  • Als staged wird eine Datei bezeichnet, die einen Index zum Verfolgen erhalten haben, aber noch nicht einem neuen Zustand zugeordnet wurde. Mit dem Befehl git commit  führt man diese Dateien zu einer neuen gespeicherten Versionen.

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

RSA-Key erstellen und verwalten

Stärkere Sicherheit als ein Passwort bieten die RSA-Keys.

Keys erstellen
Ein gute Einleitung bietet Github unter Profile/Settings/SSH-Key:
ssh_github_help


Public key weitergeben

Dem externen Programm mit add id_rsa.pub  den Key zufügen.

Ablegeort der Keys
In der versteckten und passwort-geschützten Datei .ssh werden die Keys abgelgt.
– Die zwei Keys sollten nicht auf dem Rechner liegen, bzw. falls doch, dann nur verschlüsselt. Sie auf einem Stick oder anderen Speichermedium abgelegt werden.

Zweiter Key
Hat man einen weiteren Key, kann man diesen im Programm als zusätzlichen Key zufügen. Es funktioniert nur, wenn man den private Key auf dem Rechner abgelegt hat.
Man kann den ersten Key entweder löschen oder stehen lassen.

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