[Tutorial] Wie man git benutzt.

git

Vielleicht hast du ja etwas von Git gehört und möchtest es jetzt benutzen, allerdings weißt du noch nicht, wie. Das ist kein Problem denn in diesem Tutorial wird Git leicht und verständlich erklärt. Alles was du dafür brauchst ist ein UNIX-System (Linux, Mac OS X, …), ein bisschen Zeit und einen Terminal. Terminal-Kenntnisse sind hilfreich. Mac OS X und Linux verhalten sich identisch. Fangen wir an.

1. Was ist git eigentlich?

Git wurde u.a. von Linus Torvalds dafür geschrieben, um dem Quelltext des Linux-Kernels einfacher zu verwalten. Heute ist es ein Open Source-System zur Versionsverwaltung von Projekten. Das bedeutet, dass man Änderungen an Projekten macht, die Git dann im Auge behält. Wenn man mit einer Änderung fertig ist, kann man Git sagen, dass jetzt eine Version aufgezeichnet werden soll. Diese kann man dann noch kurz beschreiben und speichern.

Wichtig ist, dass hier nicht von “klassischen” Versionen gesprochen wird (also 1.0, 1.1 etc.). Eine Version hat in einem Git keine Versionsnummer, sondern jede Version ist ein Zwischenstand des Statuses eines Projektes. Das Tolle an Git ist zudem noch, dass man alle Änderungen und den gesamten Sourcecode auch extern speichern kann. Dadurch lässt sich kollaborativ arbeiten.

Beispiel: Zwei Personen haben den selben Stand eines Projektes. Person A ändert etwas an einer Datei, Person B an einer anderen. Beide machen ein commit (eine Version) und schicken diesen an einen externen Server. Der Server erkennt, was verändert wurde und pflegt die Änderungen ein. Beide Personen können dann einen pull machen (die aktuellste Version herunterladen) und haben dann wieder den gleichen Stand.

2. Ein Git einrichten

a. Git installieren

Damit du ein Git einrichten kannst, musst du es zuerst installieren. Auf Linux kannst du dies über eine Paketverwaltung tun. Bei Debian/Ubuntu wäre das z.B. apt-get oder aptitude:

apt-get install git

Auf Mac OS X ist git bereits vorinstalliert.

b. Git initialisieren

Lege zuerst ein Verzeichnis an, dass du als Git benutzen möchtest und wechsle hinein oder wechsle direkt in ein bestehendes Verzeichnis (dafür dann mkdir … weglassen, vorhandene Dateien bleiben bestehen):

mkdir /path/to/directory/ && cd /path/to/directory/

Jetzt kommt die Magie. Ein simpler Befehl genügt und schon hast du ein Git:

git init

3. Das Git benutzen

a. git add

Das Git ist bereits einsatzbereit. Wenn du mit einem neuen Projekt anfangen möchtest, kannst du bereits Dateien erstellen, verändern, etc.. Du musst Git mitteilen, welche Dateien verändert/hinzugefügt wurden. Dies geschieht mit:

git add FILE1 FILE2 …

Anschließend weiß Git, welche Dateien verändert wurden.

b. git rm

Wenn du Dateien aus einem Projekt entfernen möchtest, verwende diesen Befehl:

git rm FILE1 FILE2 …

Git macht diese Änderungen – falls noch nicht geschehen – auch direkt im Verzeichnis. Es ist also nicht notwendig, die Dateien vorher bereits zu entfernen.

c. git mv

Wenn sich in deinem Projekt Dateien verschieben und den Ort wechseln, musst du auch das dem Git mitteilen. Dies geschieht per:

git mv FILE TARGET

Git macht diese Änderungen – falls noch nicht geschehen – auch direkt im Verzeichnis. Es ist also nicht notwendig, die Dateien vorher bereits zu entfernen.

4. Commits machen

Wenn du entsprechende Änderungen gemacht hast, musst du dem Git noch sagen, wann es eine Version mit Beschreibung erstellen soll. Das nennt sich commits. Jedes commit enthält eine Liste der Änderungen. Ein simpler Commit geht so:

git commit -m “BESCHREIBUNG”

Statt BESCHREIBUNG gibst du eine kurze Beschreibung an, was sich geändert hat, z.B. “Hyperlink-Farbe geändert”. Man schreibt vorzugsweise auf englisch, da die meisten GIt-Remotes (dazu mehr gleich) ebenfalls englisch sind.

5. Git Remotes

a. Allgemein

Ein lokales Git ist zwar schön und gut, aber die richtige Power eines Gits kommt erst zum Vorschein, wenn man sein Git auf einen Server hochlädt. Dafür gibt es zwei Möglichkeiten: Entweder nutzt man einen vorhandenen Git-Hoster (bitbucket.org, GitHub.com, …) oder man installiert sich ein eigenes Git auf einem eigenen Server (z.B. GitLab, nur für erfahrene Nutzer geeignet).

Wenn man dann einen Hoster hat, legt man dort ein Git an. Man erhält dann vom Hoster eine URL in diesem Schema:

https://HOSTERADRESSE/USERNAME/NAME.git

oder

ssh://USERNAME@HOSTERADRESSE/USERNAME/NAME.git

Wenn man eine URL vom Hoster erhalten hat, muss man diese seinem lokalen Git hinzufügen, um sie zu benutzen. Dies geschieht mit:

git remote add NAME URL

Typischerweise nennt man den ersten Remote “origin”, also git remote add origin URL. Wenn man einen Remote hinzugefügt hat und die URL des Remotes ändern möchte, kann man diesen Befehl nutzen:

git remote set-url NAME NEUEURL

Man kann auch vorhandene Remotes umbenennen:

git remote rename ALTERNAME NEUERNAME

…oder löschen:

git remote rm NAME

b. Hochladen/Herunterladen

Wenn man seinen Remote eingerichtet hat, muss man diesen natürlich auch bestücken. Dazu müssen zuerst commits gemacht worden sein. Wenn man so weit ist, führt man dann diesen Befehl aus, um alle commits an den Server zu schicken:

git push NAME BRANCH

Hat man seinen Remote z.B. “origin” genannt, führt man git push origin BRANCH aus. Nun, hier gibt es etwas, dass wir noch nicht hatten: Branch. Mehr dazu im Punkt “Branches.” Vorerst nehmen wir als Branch “master”, z.B.: git push origin master

Um Änderungen von einem Server herunterzuladen, führt man diesen Befehl aus:

git pull NAME BRANCH

z.B.: git pull origin master.

6. Änderungen verwerfen

Wenn du Änderungen gemacht hast, die dir aber doch nicht gefallen, kannst du sie, so lange sie noch nicht in einem commit waren, wieder rückgängig machen. Dazu einfach diesen Befehl ausführen:

git stash

Git macht daraufhin eine Sicherheitskopie und verwirft dann die Änderungen.

7. Branches

a. Branches erstellen und wechseln

Ein Branch ist nichts anderes als ein “Parallelprojekt”. Wenn du z.B. eine Änderung an einem Projekt machen möchtest, die aber nur testweise stattfinden soll, wird das mithilfe eines Branches gemacht. So bleiben testweise Änderungen vom Originalprojekt getrennt.

Eine Übersicht aller vorhanden Branches erhälst du durch:

git branch

Um einen neuen Branch zu erstellen, hilft dieser Befehl:

git branch NAME

Dies erstellt dann den Branch NAME. Bedenke, dass master ein reservierter Begriff ist.
Um dann nach der Erstellung zum neuen Branch zu wechseln, genügt die Eingabe von:

git checkout BRANCHNAME

Alles, was du dann änderst, bleibt nur im Branch BRANCHNAME. Dazu zählen alle Commits, Dateiadditions, …

b. Merging

Ein weiterer Vorteil solcher Branches ist es, dass dadurch ein solches Szenario möglich wird:
Im Branch master befindet sich die öffentliche Version eines Programmes. Jetzt hast du aber eine Idee, die du erst in einem Branch testen willst. Du erstellst also einen Branch und implementierst dort die Idee. In der Zwischenzeit ist ein Bug im Branch master aufgetaucht. Du wechselst also zum master-Branch, fixt den Bug, committest ihn und wechselt wieder zurück. Obwohl du Änderungen im Test-Branch hattest, sind diese Änderungen nicht im master-Branch.

Wenn deine Änderungen deinen Vorstellungen entsprechen und in den master-Branch übernommen werden sollen, musst du diese mergen (zusammenfügen). Wechsle dazu zuerst zum Branch, in den die Änderungen gehen sollen, z.B. master und führe dann diesen Befehl aus:

git merge BRANCHNAME

Statt BRANCHNAME setzt du den Branch ein, aus dem die Änderungen kommen. Schon sind die Änderungen übernommen.

Sollte ein Merge nicht erfolgreich durchgeführt werden können, weil Änderungen der beiden Branches miteinander kollidieren, erscheint eine Fehlermeldung. Diese Meldung sagt einem, welche Dateien nicht gemerged werden können. Um diesen Fehler zu behebn, genügt es, die Dateien zu öffnen. Dort sind sogenannte HEAD-markers drin. Diese Marker zeigen den Konflikt auf, z.B.:

<<<<<<< HEAD:lib/simplegit.rb
  def commit(message)
    command("git commit -m '#{message}'")
=======
  def add(path)
    command("git add #{path}")
>>>>>>> experiment:lib/simplegit.rb
  end

Nun einfach manuell die Änderungen übernehmen, die bleiben sollen und die HEAD-Marker entfernen. Anschließend einfach die Datei zum Git hinzufügen (git add FILE) und einen simplem Commit ohne Parameter machen (git commit). Der Merge ist dann fertig.

Soll nach dem Mergen ein Branch entfernt werden, muss an den merge-Befehl noch ein -d angehängt werden.

Schlusswort: Warum Git und nicht z.B. SVN?

Git ist das effektivste System. Ein simpler Test zeigt die wahre Effektivität von Git gegenüber SVN:

Es werden in SVN und Git ein komplettes Iconset hinzugefügt und committed. In SVN dauert das 45s, während Git die selbe Aufgabe in 0.3s erledigt.

Ich hoffe, ich konnte dir Git etwas näher bringen. Natürlich ist alles hier aufgezeigte nicht alles, was Git kann. Das würde den Ramen eines Anfängertutorials sprengen.

Vergiss nicht, diese Hilfsbefehle auszuführen, um zu sehen, was Git noch so kann:

git –help
git remote –help
git commit –help
git add –help

 

Glückwunsch, Adobe!

Given this, the CC applications will be available only as part of Creative Cloud. We will continue to sell and support Adobe Creative Suite® 6 applications, and will provide bug fixes and security updates as necessary. We do not, however, have any current plans to release new versions of our CS applications.

Glückwunsch, Adobe. Jetzt kann ich auch nicht mehr leiden. Wird ja dann ein interessantes Unterfangen: Adobe braucht Internet, dass die #Drosselkom nicht mehr richtig liefert. Bravo. Die Zukunft sieht rosig aus.

Quelle: Adobe.com

[Mac OS X] Zwei Ordner zusammenfügen (merge)

Vielleicht seid ihr ja schon einmal auf das Problem gestoßen, dass ihr zwei Ordner zusammenführen wollt. Wenn man einen Ordner per Finder einfach in ein Verzeichnis schmeißt, in dem der gleiche Ordnername bereits vorhanden ist, bietet der Finder aber nur die Option zum Ersetzen an. Glücklicherweise hat Apple ein kleines Terminal-Tool inkludiert, dass diese Aufgabe erledigen kann:

ditto Quellverzeichnis Zielverzeichnis

Beispiel

Ihr habt ein Verzeichnis “Folder” auf eurem Desktop. Dort sind Dateien drin, die ihr mit dem Ordner “Folder” im Unterordner “Testing” auf eurem Desktop zusammenführen wollt:

ditto ~/Folder ~/Testing/Folder

Voilá! :)

Die Deutsche Telekom kann aufgrund einer neuen Rechtslage alle Internet-User zwingen, sich ein Telekom-Modem zu kaufen. Die Telekom vertreibt ein Modell aus China. Die alten Modems müssten weggeworfen werden. Die Bundesregierung spekuliert mit fantastischen Mehreinnahmen und der totalen Kontrolle des Internet durch einen Staatsbetrieb.

Sollten sie das durchbringen, gibt’s Massenproteste. China-Modelle haben mehr als genug Sicherheitslücken und Monopole tun nie gut…

Quelle: Deutsche Wirtschaftsnachrichten

Genauso wie im Mobilfunk wird es künftig für neue Call&Surf- und Entertain-Verträge integrierte Highspeed-Volumina geben. Ist die Volumengrenze erreicht, sehen die Leistungsbeschreibungen eine einheitliche Reduzierung der Internetbandbreite auf 384 Kbit/s vor. Zunächst werden nur die Leistungsbeschreibungen angepasst. Sobald die Limitierung technisch umgesetzt wird, können Kunden über Zubuchoptionen weiteres Hochgeschwindigkeits-Volumen hinzubuchen.

Damit ist die Telekom jetzt endgültig für mich gestorben. Gut gemacht, liebe Telekom.

Quelle: Stadt Bremerhaven

{Update} Wie sich leider herausgestellt hat, entspricht das nicht der Wahrheit.

Bei Google könnte demnächst eine milliardenschwere Übernahme anstehen – und der potentielle Kaufkandidat ist kein Unbekannter: Laut “internen Quellen” plant Google die Übernahme der populären Messaging-App WhatsApp und soll mit den Verhandlungen bereits in der Endphase sein.

 

Würde ich sehr begrüßen. Google ist für gute Services und kostenfreie Dienste bekannt.

Quelle: GoogleWatchBlog

[Universal] Android am PC steuern – Take #2

Wie man Android vom PC aus steuert, habe ich ja schon einmal beschrieben. Der Artikel ist mittlerweile jedoch etwas mehr als zwei Jahre alt und nicht mehr wirklich aktuell, da es auch neuere Methoden gibt. Eine davon beschreibe ich hier. (Android 4.0+!)

VNC-Server

Ein Weg ist, das Android-Gerät als VNC-Server einzurichten. VNC (=Virtual Network Computing) funktioniert ähnlich TeamViewer, nur mit IP-Adresse statt Code (was Fernzugriff somit für Privatpersonen verhindert).

Dieser Vorgang erfordert ROOT. Wenn du dein Android-Gerät nicht gerootet hast oder nicht weißt, was das ist, beachte bitte nur die mit “NR”-markierten Schritte.

  1. R: Installiere dir die “droid VNC server“-App aus dem Play Store.
    NR: Installiere dir die “VMLite VNC Server“-App aus dem Play Store. (6,06 €, Stand 25.03.2013)
  2. Öffne sie und gehe in die Einstellungen.
  3. Setze dort ein VNC-Passwort (empfohlen!). Wenn du dein ZTE-Gerät hast, aktiviere zudem noch die Option “Rotate display by 180°” bzw. “Screen rotation”.

    Optimale Einstellungen für alle Nexus-Geräte

    Optimale Einstellungen für alle Nexus-Geräte

  4. Starte den VNC Server auf deinem Gerät. Der nachfolgende Schrott hängt nun von deinem verwendeten Betriebssystem ab.

Ein Hinweis zu allen VNC-Servern für Android: Leider funktioniert nach dem Beenden des Servers die interne Tastatur dann nicht mehr. Ein Neustart des Gerätes löst das Problem jedoch.

Windows

  1. Lade dir TightVNC herunter.
  2. Installiere TightVNC (viewer) und starte es.
  3. Tippe als IP-Adresse die IP-Adresse deines Android-Gerätes ein.
    Du findest die IP-Adresse in den WLAN-Einstellungen deines Gerätes heraus.
  4. Tippe das von dir verwendete Kennwort ein, sobald du danach gefragt wirst.

Mac OS X

  1. Aktiviere den Finder.
  2. Klicke auf im Menü auf “Gehe zu”, anschließend auf “Mit Server verbinden…”. (oder CMD+K)
  3. Im Feld “Serveradresse” trage vnc://IP-ADRESSE ein. Ersetze IP-ADRESSE mit der IP deines Android-Gerätes.
    Du findest die IP-Adresse in den WLAN-Einstellungen deines Gerätes heraus.
  4. Klicke auf “Verbinden”.
  5. Wähle jetzt “Als registrierter Benutzer” aus. Tippe als Kennwort dein eingestelltes Kennwort ein.

Linux

Leider ist die Prozedur nicht für jede Distribution gültig. Siehe nach, ob deine verwendete Linux-Distribution einen VNC-Clienten (meist auch Bildschirmfreigabe genannt) besitzt.

Android

Für Android kannst du die App “android-vnc-viewer” aus dem Play Store benutzen.

[UNIX] SSH mit privatem Key absichern

Alle Serverbesitzer nutzen SSH, um Befehle auf ihrem Server auszuführen. Damit das aber nicht jeder machen kann, nutzen sie 1. einen anderen Benutzer als root (hoffentlich!) und 2. ein sicheres Passwort. Letzteres kann durchaus nervig sein, wenn man öfter mal was machen muss. Damit man aber nicht weder Sicherheit aufgeben muss noch mit nervigem Passwort leben muss, kann man auch SSH-Schlüssel benutzen.

Was sind SSH-Schlüssel?

SSH-Schlüssel sind ein Schlüsselpaar aus privatem und öffentlichem Schlüssel. Der private Schlüssel bleibt dabei auf dem lokalen PC, während der Server den öffentlichen Schlüssel erhält. Meldet man sich mit dem privaten Schlüssel an, kann der Server mit dem öffentlichen Schlüssel prüfen, ob der sich anzumeldende Benutzer tatsächlich der richtige Benutzer ist. Ein Pluspunkt für die Sicherheit.

Quelle: http://www.sejutaumat.com/wp-content/uploads/2012/07/key_diagram.png

Quelle: http://www.sejutaumat.com/wp-content/uploads/2012/07/key_diagram.png

SSH-Keys einrichten

Nachfolgend wird die Einrichtung von SSH-Keys für UNIX-ähnliche Systeme (Mac OS X, Linux, Android etc.) beschrieben.

  1. Öffne einen Terminal.
  2. Gib den Befehl ssh-keygen ein.
    Wichtig: An dieser Stelle wird entschieden, ob der Schlüssel mit einem Passwort gesichert werden soll. Es ist ratsam, ein Passwort zu verwenden, da sonst jeder mit Zugriff auf deine SSH-Dateien auch den Schlüssel hätte. Ohne Passwort ist der Schlüssel jedoch nutzlos. Dieses Passwort muss bei jeder Anmeldung am Server eingegeben werden. Man kann das Passwort jedoch im Schlüsselbund speichern.
    Den Speicherort der Datei “id_rsa” musst du nicht verändern.
    Du kannst später weitere Passwörter mit dem Befehl ssh-keygen -p hinzufügen.

Öffentlichen SSH-Key auf den Server übertragen

Linux kommt mit dem Tool “ssh-copy-id”. Mac OS X fehlt dies leider. Dies kann jedoch über die MacPorts installiert werden. (sudo port install ssh-copy-id).

  1. ssh-copy-id -i .ssh/id_rsa.pub username@server
    Ersetze username mit deinem SSH-Benutzernamen, mit dem du dich auf dem Server “server” anmeldest.
  2. Du wirst nun gebeten, das Passwort für den Benutzer eingeben. Dies ist dein Serverpasswort, nicht das Schlüsselpasswort.

Wenn der Vorgang abgeschlossen ist, kannst du dich per SSH auf deinem Server anmelden: ssh benutzer@server

Du wirst anschließend nach deinem Schlüsselpasswort gefragt. Du kannst dann auswählen, dass das Passwort im Schlüsselbund gespeichert werden soll.