RSS

Archiv der Kategorie: Softwareentwicklung

OS X 10.8 (Lion): Installation eines Git-Servers


 

Motivation

Ich weiß nicht, ob ich es schon oft genug erwähnt habe 😉 – Pappi hat einen Mac. Nach ein paar Wochen Eingewöhnungszeit, um sich mit den elementaren OS X Funktionen zu beschäftigen, ist es an der Zeit, den Mac mit zusätzlichen Funktionen auszustatten, z.B. mit einem Git-Server. Ich bin immer noch von der Leistung dieses Gerätes beeindruckt und finde, die sollte man auch ausnutzen…

 

Installation Git-Server

  1. Download der aktuellen Version von http://git-scm.com/downloads
    Hinweis: hat man bereits git installiert, kann man die aktuellste Developer-Version auch mit git herunterladen:
    git clone https://github.com/git/git.git

     

  2. Doppelklick auf die Disk-Image-Datei:
    Bildschirmfoto 2013-05-02 um 23.45.26
  3. CTRL-Taste gedrückt halten und auf die pkg Datei klicken > Öffnen > Öffnen
    Bildschirmfoto 2013-05-02 um 23.53.37
  4. Fortfahren > Installieren > Passwort eingeben > Software installieren
    Bildschirmfoto 2013-05-02 um 23.58.15
  5. Terminal öffnen und den Befehl git --version eingeben:
    Bildschirmfoto 2013-05-02 um 23.59.50

Installation Git-GUI-Client

Es gibt eine Fülle an Git-GUI-Clients für alle möglichen Betriebssysteme, u.a. siehe hier: http://git-scm.com/downloads/guis. Den Favoriten muss man letztendlich für sich selbst bestimmen. Da ich selbst erst seit kurzem stolzer Mac Besitzer bin, kann ich auch noch keine Erfahrungsberichte hierzu abgeben. Zudem kommt man früher oder später nicht um das Kommandozeilen-Programm „git“ herum. Man sollte sich deshalb überlegen, ob es überhaupt sinnvoll ist, mit einem git-GUI-Client zu arbeiten.

Um trotzdem ein Beispiel zu nennen, empfehle ich den (aktuell) freien Client SourceTree, der für OS X und Windows verfügbar ist.

 

Konfiguration Git-Server

Für meinen Git-Server will ich SSH (Secure Shell) Zugriff und Multi-User-Zugriff konfigurieren.

SSH freigeben

  1. In den Systemeinstellungen auf „Freigaben“ klicken:
    Bildschirmfoto 2013-05-03 um 00.42.05
  2. „Entfernte Anmeldung“ aktivieren:
    Bildschirmfoto 2013-05-03 um 00.49.25
    Hinweis: Will man nur für bestimmte Benutzer eine Remote-Anmeldung ermöglichen, dann kann man das im Bereich „Zugriff erlauben für“ einstellen!

Git-Admin und Developer Accounts einrichten

Man könnte einen Account „git“ für alle Entwickler einrichten, oder für jeden Entwickler einen eigenen Account und diese einer gemeinsamen Gruppe (z.B. „git“ oder „developer“) zuordnen. Wegen der Nachvollziehbarkeit der einzelnen Aktivitäten, habe ich mich für die zweite Variante entschieden.

  1.  Systemeinstellungen aktivieren und „“ auswählen:
    Bildschirmfoto 2013-05-03 um 01.02.03
  2. Neue Gruppe „git“ anlegen: + 
    Bildschirmfoto 2013-05-03 um 01.03.55
  3. Git-Admin-Account „git“ anlegen: +
  4. Accounts für die Entwickler anlegen: +
  5. Git-Admin und Entwickler der Gruppe „git“ zuweisen:
    Bildschirmfoto 2013-05-03 um 01.12.40
  6. SSH Zugriff erlauben: 
    Will man nur bestimmten Personen Zugriff auf den Server per SSH erlauben, kann man dies unter „Entfernte Anmeldung“ aktivieren einrichten.
  7. Für jeden Entwickler im Home-Verzeichnis eine Datei „.bashrc“ anlegen bzw. mit folgender Zeile erweitern:
    export PATH=$PATH:/usr/local/git/bin/

 

Server-Repository erstellen

Für alle Aufgaben im zentralen Git-Repository verwenden wir den zuvor angelegten Benutzer „git“.

Man legt für diesen User ein Hauptverzeichnis „repo“ an unter dem alle Repositories als Unterverzeichnisse abgelegt werden.

Beispiel:

su – git

mkdir ~/repositories

cd repositories

Danach erstellt man für jedes Projekt ein leeres Unterverzeichnis und ordnet es der entsprechenden Gruppe zu.

mkdir testprojekt.git

sudo chgrp git testprojekt.git

sudo chmod g+rws testprojekt.git

cd testprojekt.git

Hinweis: Es ist weit verbreitet, das zentrale Repositories mit dem Suffix „.git“ zu versehen, um sie als Git-Repositories kenntlich zu machen.

Danach initialisiert man das zentrale Repository mit dem Befehl „init“ und dem Schalter „bare“: Damit vermeidet man, dass eine Arbeitskopie erstellt wird und damit unnötige Git-Hilfsdateien erzeugt werden. Das zentrale Repository ist dann auch nicht dafür geeignet, direkt damit zu arbeiten. Man muss vorher das entsprechende Projekt auf einem Client auschecken, also ein lokales Git-Repository erzeugen. Zusätzlich wird noch der Schalter „—shared“ mitgegeben, damit können alle Gruppenmitglieder auf das Repository zugreifen.

sudo git init –bare –shared

 

Test

Beispielsweise von einem Linux-Client auf das Test-Repository auf dem Server zuzugreifen. Voraussetzung: der Entwickler wurde auf dem iMac eingerichtet und darf sich per SSH einloggen

Client:

  1. Lokales Projektverzeichnis anlegen: mkdir ~/projects
  2. und hineinwechseln: cd projects
  3. Testprojekt clonen:
    juergen@vostro ~/projects $ git clone juergen@imac:~git/repositories/testprojekt.git
    Cloning into ‚testprojekt’…
    Password:

    warning: You appear to have cloned an empty repository.

 

Fazit

Das Einrichten von Git ist nicht besonders kompliziert, im Grunde ähnlich, wie auf Linux-Derivaten. Auch die benötigte Software ist einfach erhältlich. Wer also die Vorteile eines Config-Management-Systems nutzen will, kann dies mit der freien Software „git“ auch auf dem Mac tun. Ich nutze die Versionskontrolle nicht nur für die Software-Entwicklung, sondern auch für Dokumente, Fotos etc. Besonders beim Projekt-Management, bei dem eine Vielzahl von Dokumenten ständigen Änderungen unterworfen sind, macht meiner Meinung nach eine Versionskontrolle, Sinn.

  

Links

REW: Kurzanleitung “Fit für Git” 😉 

REW: Git: Quick Guide: Arbeiten mit Remote-Repositories

 

Schlagwörter: ,

Git: Quick Guide: Arbeiten mit Remote-Repositories

Git: Quick Guide: Arbeiten mit Remote-Repositories

 

Motivation

Ich habe mir hier mal die Mühe gemacht den Git-Anwendungsfall „Arbeiten mit Remote-Repositories“ als Quick-Guide zusammenzufassen. Wer umfangreichere Informationen wünscht, sei auf den Artikel „Git: Kurzanleitung “Fit für Git” 😉“ verwiesen, bzw. auf die darin enthaltenen Links.

Voraussetzungen

  1. Es ist ein lokales Projekt auf dem Client vorhanden, das auf dem Server publiziert werden soll
  2. Der Server ist als shareable Git-Repository eingerichtet

Server

  1. Auf dem Server einloggen, z.B.:
    cd /exports/git/repos
  2. Im Repository Verzeichnis das Projekt leer anlegen,
    mkdir Projektname.git
    z.B.:
    mkdir –p sapnwds73/SOAP2REST.git
  3. In das neue Repository-Verzeichnis wechseln
  4. Repository initialisieren:
    sudo git init –bare –shared

Client 1: Server Repo initial befüllen

  1. In das lokale Projektverzeichnis wechseln
  2. „git init“ durchführen
  3. Mit dem Remote-Repository auf dem Server verlinken:
    git remote add origin juergen@aspire:Remote-Repos-Verzeichnis/Projektname.git
    z.B.:
    git remote add origin juergen@aspire:/exports/git/repos/sapnwds73/SOAP2REST.git
  4. Dateien zur Versionskontrolle hinzufügen (in Staging-Area verschieben):
    git add .
  5. Dateien in die lokales Repository verschieben:
    git commit -m Kommentar
    z.B.:
    git commit -m „Initial Revision“
  6. Inhalt auf Server schieben (einchecken):
    git push origin master
  7. Check:
    git status

==> Projekt ist auf dem Server und kann von anderen Clients ausgecheckt werden!

Client 2: Server Repo auschecken

  1. Verzeichnis anlegen
  2. In das Verzeichnis wechseln
  3. Auschecken des Projektes:
    git clone juergen@aspire:Remote-Repos-Verzeichnis/Projektname.git
    z.B.:
    git clone juergen@aspire:/exports/git/repos/sapnwds73/SOAP2REST.git
  4. Änderungen durchführen, z.B.:
    Dateien hinzufügen (git add Datei)
    Dateien ändern (keine Aktion notwendig)
    Dateien umbenennen (git mv Datei)
    Dateien löschen (git rm Datei)
  5. Änderungen überprüfen:
    git diff
  6. Dateien in die lokales Repository verschieben:
    git commit -m Kommentar
    z.B.:
    git commit -m „Initial Revision“
  7. Inhalt auf Server schieben (einchecken):
    git push origin master
  8. Check:
    git status

==> Änderungen des Projektes sind auf dem Server und können von anderen Clients ausgecheckt werden!

Links

 Git: Kurzanleitung “Fit für Git” 😉

 

Sorry, this post is not available in english language 😦

 
Hinterlasse einen Kommentar

Verfasst von - Februar 24, 2013 in IT, Softwareentwicklung

 

Schlagwörter: ,

Notepad++ auf Linux laufen lassen

Notepad++ auf Linux laufen lassen

Motivation

Es gibt eine Vielzahl von Editoren, die auch für Programmierung geeignet sind. Im Laufe der Jahre habe ich Notepad++ als meinen Favoriten auserkoren. Leider gibt es derzeit keine native Linux-Version, aber es gibt Wine. Beide können glücklicherweise miteinander, so dass einer Verwendung unter Linux nichts im Wege steht.

change.log - Notepad++_006

Installation

Vorgehensweise:

  1. Download und Installation von Wine (geht meist einfach und schnell über den Package-Manager der verwendeten Linux-Distro)
  2. Download von Notepad++, z.B. nach ~/Download/npp.6.3.Installer.exe
  3. Download-Datei ins virtuelle C: Laufwerk von Wine kopieren:
    mv ~/Download/npp.6.3.Installer.exe ~/.wine/drive_c
  4. Installation Notepad++:
    wine c:\npp.6.3.Installer.exe
  5. Notepad++ kann nun wie jede andere Linux-App gestartet und verwendet werden

Plugins installieren

mit dem Plugin-Manager

Nach dem Start von Notepad++ findet man im Menü unter Erweiterungen den Plugin-Manager. Dieses Tool erlaubt eine einfache und schnelle Installation der aktuell vorhandenen Plugins. Zudem kann man sehen, ob die Plugins mit der verwendeten Version des Notepad++ funktionieren.

Man wählt einfach die gewünschten Plugins aus und installiert diese:

Plugin Manager_005

 

Ein Neustart von Notepad++ ist zur Aktivierung der Plugins notwendig!

manuelle Installation

Plugins sind u.a. auf http://sourceforge.net/projects/npp-plugins/files/ zu finden.

Interessant sind für mich die „XML Tools“ und das „Notepad++ Compare plugin“, beide zu finden auf dem o.g. Link.

Vorgehensweise:

  1. Download der Plugins (ZIP-Format)
  2. Kopieren der ZIP Dateien nach ~/.wine/drive_c
  3. Einen Datei-Explorer starten
  4. In das virtuelle C: Laufwerk von Wine wechseln, z.B.: ~/.wine/dosdevices/c:/
  5. ZIP Dateien entpacken
  6. In das entpackte Verzeichnis wechseln
  7. Die Datein in das Installationsverzeichnis von Notepad++ kopieren, z.B. nach ~/.wine/dosdevices/c:/Program Files (x86)/Notepad++/plugins 
  8. Notepad++ neu starten

Fazit

 Ich hatte keine Probleme mit der Installation von Notepad++. Die Installation ist einfach und funktioniert 🙂

 

This post is not avaiable in english. Sorry!

 
Hinterlasse einen Kommentar

Verfasst von - Februar 8, 2013 in IT, Linux, Softwareentwicklung

 

Schlagwörter: , ,

Git: Kurzanleitung „Fit für Git“ ;-)

Git: Kurzanleitung „Fit für Git“ ;-)

Motivation

„Git ([ɡɪt], engl. Blödmann) ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die ursprünglich für die Quellcode-Verwaltung des Linux-Kernels entwickelt wurde.“ (http://de.wikipedia.org/wiki/Git)

Jeder der Software entwickelt, stellt irgendwann fest, dass eine Versionsverwaltung sinnvoll ist. Ohne eine Anspruch auf Vollständigkeit zu erheben, gibt es meist folgende Gründe: alte Versionsstände zurückspielen, Branches (Zweige der Entwicklung) zu eröffnen, oder, um im Team zu arbeiten.

Neben Git gibt es noch andere, freie, VCS (Version Control Systems). Populär sind unter anderem CVS und Subversion. Wenn man die Szene betrachtet, fällt auf, dass der Trend immer mehr in Richtung Git geht.

Git bietet, wie auch CVS oder Subversion, Clients für alle möglichen Betriebssysteme herunterladen, u.a. Windows, Linux, Solaris, Mac OS X.

 

Arbeitsweise

 

Philosophie

Git ist dezentral (distributed) und unterscheidet sich von traditionellen, zentral verwalteten Programmen, wie etwa CVS oder Subversion, dadurch,  dass kein zentraler Server benötigt wird. Ein Distributed VCS-System, wie Git, checkt im Gegensatz zu zentralen VCS-Systemen alle Dateien und Verwaltungsinformationen (Historie etc.) aus.

 

Vergleich mit CVS und Subversion

Ich habe mit einige Meinungen im Internet herausgepickt, die, teilweise subjektiv, für eine Verwendung von Git sprechen:

  • Hat sich auch in großen Projekten bewährt (Linux-Kernel, Xorg, VLC, etc.)
  • Trend spricht für Git: Anzahl der verfügbaren Git-Repositories steigt stark an
  • Offline-Arbeiten immer möglich, da dezentral, d.h. es wird nach dem Erstellen der Arbeitskopie kein Zugriff mehr notwendig ist, alle Informationen sind in der Arbeitskopie
  • Schneller als CVS oder Subversion, da man vorwiegend lokal arbeitet
  • Mergen von Branches ist bei Subversion teilweise problematisch
  • etc.

Die letzte aktuelle Git-Version (10.12.2012) lautet 1.8.0.2.

 

Git Workflow

Wenn man mit Git ein Verzeichnis unter Versionskontrolle stellen will, führt man folgende Schritte durch:

  1. Erstellen eines Verzeichnisses, das zum Beispiel dem Projektnamen entspricht.
  2. In das Verzeichnis wechseln und unter Git Versionskontrolle stellen (git init)

Damit hat man automatisch folgende Struktur geschaffen:

git_local_rep1

 

Ein Verzeichnis (Arbeitsbereich, Workspace), eine Staging-Area (Index) und ein lokales Git-Repository. Dateien aus dem Verzeichnis können in die Staging-Area verschoben werden (git add). Dateien aus der Staging-Area können in das lokale Git-Repository verschoben werden (git commit).

Alle Änderungen werden im Arbeitsbereich durchgeführt und haben zunächst keinen Einfluß auf die Git-Verwaltung, d.h. die Staging-Area und der Repository-Inhalt bleibt unverändert.

Die Reihenfolge ist also: Änderung(en) durchführen > git add > git commit

 

Wo ist der Server ?

Da Git dezentral arbeitet, ist ein Server nicht notwendig. Trotzdem kann man natürlich ein Git-Remote-Repository einrichten, also eine Instanz, die als Server fungiert und auf die ein lokales Git-Repository referenzieren kann.

Man kann von einem Server eine Kopie des Repositores in das lokale Git-Repository herunterladen (auschecken), dazu dient der Befehl „git pull“. Anschließend arbeitet man auf dem lokalen Git-Repository weiter. Will man die Änderungen auf den Server hochladen (einchecken), dann ist das mit dem Befehl „git push“ möglich.

Für den Fall, dass man ein Git-Remote-Repository einbindet, wird die Infrastruktur wie folgt erweitert:

git_remote_rep1

 

Installation Git

Die grundsätzliche Installation von Git, egal, ob Server oder Client, wird im Folgenden für Linux- und Windows-Systeme beschrieben.

 

Linux

Auf Ubuntu oder Debian:

sudo apt-get install git-core python-setuptools

 

Windows

Git kann man direkt von http://git-scm.com/downloads herunterladen.

 

Applikationen

 

Linux

Unter Linux hat man das Terminal mit einer Shell (z.B. Bash) und kann git direkt aufrufen. Der Pfad auf git ist defaultmäßig bereits nach der Installation gesetzt.

Als Repository-Browser kann man „gitg“ verwenden.

 

Windows

Git-Bash

Nach der Installation erhält man die Git-Bash, eine Shell, von der aus alle Git-Befehle aufgerufen werden können.

Windows-Explorer

Zusätzlich werden im Windows-Explorer Kontext-Menus hinzugefügt.

 

Konfiguration Git

Der erste Schritt, bei der Verwendung von Git auf einem Rechner, sollte die Einrichtung des Users sein. Dieser erscheint in allen Änderungen und macht ihn identifizierbar (Rückfragen etc.).

Alle Befehle werden auf der Git-Bash ausgeführt!

Die Befehle dazu lauten:

<code>git config --global user.name </code>"Your Name"<code></code>
<code>git config --global user.email your@email.com<br /></code>

Siehe auch: http://git-scm.com/book/en/Customizing-Git-Git-Configuration

 

Lokal arbeiten

Auf Client-Seite, also lokal, arbeitet man mit einer Arbeitskopie. Ob diese Arbeitskopie lokal bleiben soll, durch Auschecken von einem Server heruntergeladen, oder später auf irgendeinen Server hochgeladen werden soll, ist erst einmal sekundär.

 

Projekte erstellen 

Neuerstellung

Will man ein neues Projekt erstellen, dann verwendet man die Option „init“. Man erstellt ein Verzeichnis, wechselt dahin und gibt den Befehl „git init“ ein. Der Verzeichnisname entspricht damit dem Projektnamen

Beispiel:

mkdir testprojekt

cd testprojekt

git init

 

Vorhandenes Verzeichnis in ein Git-Repository umwandeln (lokal)

Wenn man bereits ein Projekt hat, kann man mit dem „init“ Befehl ein lokales Git-Repository erstellen. Es werden alle Dateien des entsprechenden Verzeichnisses direkt in das Repository übernommen.

Man wechselt in das entsprechende Projekt-Verzeichnis und ruft in der Git-Bash den Befehl „git init“ auf. 

 

Repository von einem Server auschecken

Will man ein Projekt, etwa aus dem Internet lokal speichern und weiterbearbeiten, dann „klont“ man es 😉 Man erstellt damit eine lokale Arbeitskopie bzw. ein lokales Repository.

 

Änderungen durchführen

Workflow

git_changes1

 

Dateien hinzufügen

Man wechselt in das entsprechende Arbeitsverzeichnis und erstellt eine Datei, z.B. mit einem Texteditor.

Danach schiebt man diese Datei in die Staging-Area, mit dem Befehl:

git add

Will man mehrere Dateien gleichzeitig hinzufügen, kann man auch Joker „*“ verwenden, z.B.

git add *

Dateien, die im aktuellen Repository noch nicht im Index (Staging-Area) stehen, ermittelt man mit dem Befehl „git status“.

 

Dateien ändern

Sobald eine Datei unter Git verwaltet wird, wird sie „getracked“. Damit Änderungen im lokalen Git-Repository landen, müssen sie vorher in die Staging-Area verschoben werden. Das geschieht durch den Befehl „git add Datei“, auch wenn die Datei bereits in der Git-Versionsverwaltung existiert!

Der Befehl „git add“ macht Änderungen in einer Datei in der Staging-Area bekannt!

Der Befehl „git status“ zeigt u.a. den aktuellen Zustand der Staging-Area an, d.h. welche Dateien befinden sich darin und welche Dateien können comitted werden.

 

Dateien löschen

Mit dem Befehl „git rm“ kann man Dateien löschen:

git rm dummy.txt

Die Änderung ist dann automatisch in der Staging-Area und kann mit einem commit in das lokale Git-Repository verschoben werden.

 

Dateien umbenennen

Mit dem Befehl „git mv“ kann man Dateien löschen:

git mv alterName.txt neuerName.txt

Die Änderung ist dann automatisch in der Staging-Area und kann mit einem commit in das lokale Git-Repository verschoben werden.

 

Änderungen im lokalen Git-Repository bekanntmachen

Um Änderungen von der Staging-Area in das lokale Git-Repository zu übertragen, verwendet man den Befehl „git commit“.

git commit

git commit –m Kommentar

 

Änderungen rückgängig machen

 

Task

Befehl

Workspace
(W)

Index
(I)

Repository
(R)

Datei anlegen

touch Datei.txt

Datei.txt V1

Datei in Staging-Area verschieben

git add Datei.txt

Datei.txt V1

Datei.txt V1

Datei in Repository schieben

git commit

Datei.txt V1

Datei.txt V1

Datei.txt V1

Änderungen in Staging-Area rückgängig machen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git add Datei.txt

Datei.txt V2

Datei.txt V2

Datei.txt V1

git reset

Datei.txt V2

Datei.txt V1

Datei.txt V1

git checkout – Datei.txt

Datei.txt V1

Datei.txt V1

Datei.txt V1

Änderungen im Workspace rückgängig machen

touch Datei2.txt

Datei.txt V2
Datei2.txt V1

Datei.txt V1

Datei.txt V1

clean –f

Datei.txt V1

Datei.txt V1

Datei.txt V1

Workspace auf Stand der Staging-Area zurücksetzen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git checkout – Datei.txt

Datei.txt V1

Datei.txt V1

Datei.txt V1

Workspace und Staging-Area auf aktuellen Stand des Repositories zurücksetzen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git add Datei.txt

Datei.txt V2

Datei.txt V2

Datei.txt V1

git reset –hard

Datei.txt V1

Datei.txt V1

Datei.txt V1

Workspace, Staging-Area und Repository auf vorigen Stand (seit dem letzten Commit) zurücksetzen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git commit –a

Datei.txt V2

Datei.txt V2

Datei.txt V2

git reset –hard HEAD~1
(Hinweis: HEAD~2 setzt auf den vorletzten Commit zurück etc.)

Datei.txt V1

Datei.txt V1

Datei.txt V1

 

Änderungen anschauen:

  • git status: zeigt Änderungen im Workspace und in der Staging-Area an, die durchzuführen sind.
  • git log: zeigt die Commits im Repository an
  • git diff: zeigt die Unterschiede zwischen Workspace und Index (Staging-Area)
  • git diff HEAD: zeigt die Änderungen zwischen Workspace und Repository

 

Hochladen/Einchecken

Will man das lokale Git-Repository auf einen Server laden, führt man den Befehl „push“ aus. Beim erstenmal muss man mitteilen in welchen Branch auf dem „Hauptrepository“ die Arbeitskopie landen soll:

git push origin master

 

Versionierung/Tags

Mit dem Befehl „git tag -a“ kennzeichnet man einen Commit, also einen Stand im lokalen Git-Repository.

Beispiel:

git tag -a v1.0.0 -m „Creating the first official version.“

Will man sich vorher überzeugen, welche Dateien in den Tag aufgenommen werden, kann man den Befehl „git ls-files“ verwenden.

Um die vorhandenen Tags aufzulisten, kann man den Befehl „git tag“ verwenden. Danach kann man sich mit „git tag –v“ Details zu einem Tag anschauen:

git tag –v v1.0.0

Mit dem Befehl „git show“ kann man sich die Änderungen im lokalen Repository anschauen:

git show v1.0.0

Um einen bestimmten, getaggten Versionsstand in der Staging-Area und im Workspace auszuchecken, kann man „git checkout“ verwenden:

git checkout v1.0.0

Tags kann man auch löschen, hierzu dient der Befehl „git tag –d“

git tag –d v1.0.0

Für die Synchronisation mit einem remote Git-Repository dienen die Befehle

git push

git push –tags

git fetch

git fetch –tags

 

Entwicklungszweige/Branches

Ein Entwicklungszweig (Branch) ist eine Verzweigung in einem Projekt, die parallel zum bestehenden Hauptzweig erstellt wird. Hat man mehrere Entwicklungszweige zu pflegen, wie beispielsweise stable oder testing, kann man sich der Branches bedienen. Um bestehende Branches anzuzeigen, gibt man den Befehl „git branch“ ein. 

 

Will man einen neuen Branch anlegen, verwendet man den Befehl „git branch“:

git branch Branchname

 

Beispiel:

git branch testing

 

Will man zu einem bestimmten Branch wechseln, verwendet man den Befehl „git checkout“:

git checkout Branchname

 

Beispiele:

git checkout testing

git checkout master

 

Um einen Branch zu löschen, verwendet man den Befehl

git branch –d Branchname

 

Um einen Branch auf ein bekanntes remote Git-Repository zu schieben, dient der Befehl:

git push origin Branchname

 Beispiel:

git push origin testing

 

Um den Branch auf dem remote Git-Repository wieder zu löschen, dient der Befehl:

git push origin :Branchname

 Beispiel:

git push origin :testing

 

Um sich nur Branches im lokalen Git-Repository anzuzeigen, verwendet man den Befehl:

git branch –a

Um sich nur Branches im remote Git-Repository anzuzeigen, verwendet man den Befehl:

git branch –r

 

Dateien im Workspace ignorieren

Die Datei „.gitignore“ gibt vor, welche Dateien von Git ignoriert werden sollen. Man kann diese Datei im Hauptverzeichnis des Workspaces anlegen, aber auch in den Unterverzeichnissen.

 

Beispiel einer Datei „.gitignore“:

# Can ignore specific files

.DS_Store

 

# Use wildcards as well

*~

*.swp

 

# Can also ignore all directories and files in a directory.

tmp/**/*

 

Man kann auch eine .gitignore Datei im HOME Verzeichnis anlegen. Sie betrifft dann alle Repositories, sofern sie durch folgenden (globalen) Git-Befehl aktiviert wird:

git config –global core.excludesfile ~/.gitignore

 

Server-Funktionalität einrichten

Wie bereits erwähnt handelt es sich bei Git um eine Peer-To-Peer-Lösung, ein Server ist also grundsätzlich nicht erforderlich. Aber was hält uns davon ab ein „Hauptrepository“ einzurichten, das zentral aller Versionsstände aller Projektes speichert?

Es gibt viele Möglichkeiten ein „Hauptrepository“ zu teilen, siehe auch: „8 ways to share your git repository“.

 

Der von mir präferierte Weg sieh wiefolgt aus…

Benutzer und Gruppen einrichten

Es ist sinnvoll auf dem Server eine Art-Git-Administrator einzurichten, z.B. den User „git“, der für alle zentralen Repository-Aufgaben zuständig ist. Zudem sollte man eine (oder mehrere) Gruppen einrichten, die Zugriff auf die Repositories erhalten, beispielsweise die Gruppe „developers“.

  1. Einrichten eines User „git“ und einer Gruppe „git“
    sudo adduser git
  2. Einrichten der Gruppe „developers“
    sudo addgroup developers
  3. Hinzufügen alle Accounts, die zur Gruppe „devlopers“ gehören sollen
    vi /etc/group

 

Zentrales Repository einrichten

Ein zentrales Git-Repository auf einem Server, wird wie ein lokales Git-Repository eingerichtet. Für alle Aufgaben im zentralen Git-Repository verwenden wir den zuvor angelegten Benutzer „git“.

Man legt für diesen User ein Hauptverzeichnis „repo“ an unter dem alle Repositories als Unterverzeichnisse abgelegt werden.

Beispiel:

su – git

mkdir ~/repositories

cd repositories

Danach erstellt man für jedes Projekt ein leeres Unterverzeichnis und ordnet es der entsprechenden Gruppe zu.

mkdir testprojekt.git

sudo chgrp developers testprojekt.git

sudo chmod g+rws    (Sticky-Bit nicht vergessen)

cd testprojekt.git

Hinweis: Es ist weit verbreitet, das zentrale Repositories mit dem Suffix „.git“ zu versehen, um sie als Git-Repositories kenntlich zu machen.

Danach initialisiert man das zentrale Repository mit dem Befehl „init“ und dem Schalter „bare“: Damit vermeidet man, dass eine Arbeitskopie erstellt wird und damit unnötige Git-Hilfsdateien erzeugt werden. Das zentrale Repository ist dann auch nicht dafür geeignet, direkt damit zu arbeiten. Man muss vorher das entsprechende Projekt auf einem Client auschecken, also ein lokales Git-Repository erzeugen. Zusätzlich wird noch der Schalter „—shared“ mitgegeben, damit können alle Gruppenmitglieder auf das Repository zugreifen.

sudo git init –bare –shared

 

Lokales Repository mit dem Hauptrepository auf dem Server verlinken

Ein lokales Repository kann nun zum zentralen Repository übertragen werden. Dazu wechselt man auf dem Client in das lokale Repository und setzt zunächst das origin:

cd testprojekt

git remote add origin ssh://:/~/repos/testprojekt.git

 

Lokales Repository zum Server hochladen (Einchecken)

Damit wird dem lokalen Repository mitgeteilt, auf welchem Server sich das „Original“ bzw. die zentrale „Quelle“, also das Hauptrepository befindet.

Danach schiebt man den Inhalt des lokalen Repositories auf den Server mit „push“:

git push origin master

Beim ersten mal muss der Hauptbranch „master“ mitgegeben werden.

Man kann auch von einem bestimmten Branch (Entwicklungszeig) im lokalen Repository auf einen bestimmten Branch im Hauptrepository „pushen“:

git push origin :

Beispiel: git push origin master:master

Hier kann auch ein komplett neuer Remote-Branch angelegt werden, indem master:neuerBranchName verwendet wird.

 

Hauptrepository (Server) auf Client auschecken

Um ein Hauptrepository auf einem Client auszuchecken, ist folgender Befehl notwendig:

git clone ssh://@/home/user/development/git/repo

Beispiel:

git clone ssh://juergen@aspire/~git/repositories/testprojekt.git

oder

git clone @:~git/repositories/

Beispiel:

git clone juergen@aspire:~git/repositories/testprojekt.git

Es wird dann auf dem Client ein Verzeichnis ohne den Suffix „.git“ angelegt

 

 

Anhang

 

Übersicht Workflow

Git_Workflow

 

 

Links

Git Homepage: http://git-scm.com

Ubuntu-Git Wiki:http://wiki.ubuntuusers.de/Git

http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository  

Homepdate Git for Windows: http://msysgit.github.com

Michael’s Git Tutorial – Setting Up a Git Server:  http://www.youtube.com/watch?v=SyMkLQLC3Kg  

This post is not available in english! Sorry!

 
Kommentare deaktiviert für Git: Kurzanleitung „Fit für Git“ ;-)

Verfasst von - Januar 12, 2013 in IT, Linux, Softwareentwicklung, Windows

 

Schlagwörter: , ,

Git: Kurzanleitung "Fit für Git" ;-)

Git: Kurzanleitung "Fit für Git" ;-)

Motivation

„Git ([ɡɪt], engl. Blödmann) ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die ursprünglich für die Quellcode-Verwaltung des Linux-Kernels entwickelt wurde.“ (http://de.wikipedia.org/wiki/Git)

Jeder der Software entwickelt, stellt irgendwann fest, dass eine Versionsverwaltung sinnvoll ist. Ohne eine Anspruch auf Vollständigkeit zu erheben, gibt es meist folgende Gründe: alte Versionsstände zurückspielen, Branches (Zweige der Entwicklung) zu eröffnen, oder, um im Team zu arbeiten.

Neben Git gibt es noch andere, freie, VCS (Version Control Systems). Populär sind unter anderem CVS und Subversion. Wenn man die Szene betrachtet, fällt auf, dass der Trend immer mehr in Richtung Git geht.

Git bietet, wie auch CVS oder Subversion, Clients für alle möglichen Betriebssysteme herunterladen, u.a. Windows, Linux, Solaris, Mac OS X.

 

Arbeitsweise

 

Philosophie

Git ist dezentral (distributed) und unterscheidet sich von traditionellen, zentral verwalteten Programmen, wie etwa CVS oder Subversion, dadurch,  dass kein zentraler Server benötigt wird. Ein Distributed VCS-System, wie Git, checkt im Gegensatz zu zentralen VCS-Systemen alle Dateien und Verwaltungsinformationen (Historie etc.) aus.

 

Vergleich mit CVS und Subversion

Ich habe mit einige Meinungen im Internet herausgepickt, die, teilweise subjektiv, für eine Verwendung von Git sprechen:

  • Hat sich auch in großen Projekten bewährt (Linux-Kernel, Xorg, VLC, etc.)
  • Trend spricht für Git: Anzahl der verfügbaren Git-Repositories steigt stark an
  • Offline-Arbeiten immer möglich, da dezentral, d.h. es wird nach dem Erstellen der Arbeitskopie kein Zugriff mehr notwendig ist, alle Informationen sind in der Arbeitskopie
  • Schneller als CVS oder Subversion, da man vorwiegend lokal arbeitet
  • Mergen von Branches ist bei Subversion teilweise problematisch
  • etc.

Die letzte aktuelle Git-Version (10.12.2012) lautet 1.8.0.2.

 

Git Workflow

Wenn man mit Git ein Verzeichnis unter Versionskontrolle stellen will, führt man folgende Schritte durch:

  1. Erstellen eines Verzeichnisses, das zum Beispiel dem Projektnamen entspricht.
  2. In das Verzeichnis wechseln und unter Git Versionskontrolle stellen (git init)

Damit hat man automatisch folgende Struktur geschaffen:

git_local_rep1

 

Ein Verzeichnis (Arbeitsbereich, Workspace), eine Staging-Area (Index) und ein lokales Git-Repository. Dateien aus dem Verzeichnis können in die Staging-Area verschoben werden (git add). Dateien aus der Staging-Area können in das lokale Git-Repository verschoben werden (git commit).

Alle Änderungen werden im Arbeitsbereich durchgeführt und haben zunächst keinen Einfluß auf die Git-Verwaltung, d.h. die Staging-Area und der Repository-Inhalt bleibt unverändert.

Die Reihenfolge ist also: Änderung(en) durchführen > git add > git commit

 

Wo ist der Server ?

Da Git dezentral arbeitet, ist ein Server nicht notwendig. Trotzdem kann man natürlich ein Git-Remote-Repository einrichten, also eine Instanz, die als Server fungiert und auf die ein lokales Git-Repository referenzieren kann.

Man kann von einem Server eine Kopie des Repositores in das lokale Git-Repository herunterladen (auschecken), dazu dient der Befehl „git pull“. Anschließend arbeitet man auf dem lokalen Git-Repository weiter. Will man die Änderungen auf den Server hochladen (einchecken), dann ist das mit dem Befehl „git push“ möglich.

Für den Fall, dass man ein Git-Remote-Repository einbindet, wird die Infrastruktur wie folgt erweitert:

git_remote_rep1

 

Installation Git

Die grundsätzliche Installation von Git, egal, ob Server oder Client, wird im Folgenden für Linux- und Windows-Systeme beschrieben.

 

Linux

Auf Ubuntu oder Debian:

sudo apt-get install git-core python-setuptools

 

Windows

Git kann man direkt von http://git-scm.com/downloads herunterladen.

 

Applikationen

 

Linux

Unter Linux hat man das Terminal mit einer Shell (z.B. Bash) und kann git direkt aufrufen. Der Pfad auf git ist defaultmäßig bereits nach der Installation gesetzt.

Als Repository-Browser kann man „gitg“ verwenden.

 

Windows

Git-Bash

Nach der Installation erhält man die Git-Bash, eine Shell, von der aus alle Git-Befehle aufgerufen werden können.

Windows-Explorer

Zusätzlich werden im Windows-Explorer Kontext-Menus hinzugefügt.

 

Konfiguration Git

Der erste Schritt, bei der Verwendung von Git auf einem Rechner, sollte die Einrichtung des Users sein. Dieser erscheint in allen Änderungen und macht ihn identifizierbar (Rückfragen etc.).

Alle Befehle werden auf der Git-Bash ausgeführt!

Die Befehle dazu lauten:

<code>git config --global user.name </code>"Your Name"<code></code>
<code>git config --global user.email your@email.com<br /></code>

Siehe auch: http://git-scm.com/book/en/Customizing-Git-Git-Configuration

 

Lokal arbeiten

Auf Client-Seite, also lokal, arbeitet man mit einer Arbeitskopie. Ob diese Arbeitskopie lokal bleiben soll, durch Auschecken von einem Server heruntergeladen, oder später auf irgendeinen Server hochgeladen werden soll, ist erst einmal sekundär.

 

Projekte erstellen 

Neuerstellung

Will man ein neues Projekt erstellen, dann verwendet man die Option „init“. Man erstellt ein Verzeichnis, wechselt dahin und gibt den Befehl „git init“ ein. Der Verzeichnisname entspricht damit dem Projektnamen

Beispiel:

mkdir testprojekt

cd testprojekt

git init

 

Vorhandenes Verzeichnis in ein Git-Repository umwandeln (lokal)

Wenn man bereits ein Projekt hat, kann man mit dem „init“ Befehl ein lokales Git-Repository erstellen. Es werden alle Dateien des entsprechenden Verzeichnisses direkt in das Repository übernommen.

Man wechselt in das entsprechende Projekt-Verzeichnis und ruft in der Git-Bash den Befehl „git init“ auf. 

 

Repository von einem Server auschecken

Will man ein Projekt, etwa aus dem Internet lokal speichern und weiterbearbeiten, dann „klont“ man es 😉 Man erstellt damit eine lokale Arbeitskopie bzw. ein lokales Repository.

 

Änderungen durchführen

Workflow

git_changes1

 

Dateien hinzufügen

Man wechselt in das entsprechende Arbeitsverzeichnis und erstellt eine Datei, z.B. mit einem Texteditor.

Danach schiebt man diese Datei in die Staging-Area, mit dem Befehl:

git add

Will man mehrere Dateien gleichzeitig hinzufügen, kann man auch Joker „*“ verwenden, z.B.

git add *

Dateien, die im aktuellen Repository noch nicht im Index (Staging-Area) stehen, ermittelt man mit dem Befehl „git status“.

 

Dateien ändern

Sobald eine Datei unter Git verwaltet wird, wird sie „getracked“. Damit Änderungen im lokalen Git-Repository landen, müssen sie vorher in die Staging-Area verschoben werden. Das geschieht durch den Befehl „git add Datei“, auch wenn die Datei bereits in der Git-Versionsverwaltung existiert!

Der Befehl „git add“ macht Änderungen in einer Datei in der Staging-Area bekannt!

Der Befehl „git status“ zeigt u.a. den aktuellen Zustand der Staging-Area an, d.h. welche Dateien befinden sich darin und welche Dateien können comitted werden.

 

Dateien löschen

Mit dem Befehl „git rm“ kann man Dateien löschen:

git rm dummy.txt

Die Änderung ist dann automatisch in der Staging-Area und kann mit einem commit in das lokale Git-Repository verschoben werden.

 

Dateien umbenennen

Mit dem Befehl „git mv“ kann man Dateien löschen:

git mv alterName.txt neuerName.txt

Die Änderung ist dann automatisch in der Staging-Area und kann mit einem commit in das lokale Git-Repository verschoben werden.

 

Änderungen im lokalen Git-Repository bekanntmachen

Um Änderungen von der Staging-Area in das lokale Git-Repository zu übertragen, verwendet man den Befehl „git commit“.

git commit

git commit –m Kommentar

 

Änderungen rückgängig machen

 

Task

Befehl

Workspace
(W)

Index
(I)

Repository
(R)

Datei anlegen

touch Datei.txt

Datei.txt V1

Datei in Staging-Area verschieben

git add Datei.txt

Datei.txt V1

Datei.txt V1

Datei in Repository schieben

git commit

Datei.txt V1

Datei.txt V1

Datei.txt V1

Änderungen in Staging-Area rückgängig machen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git add Datei.txt

Datei.txt V2

Datei.txt V2

Datei.txt V1

git reset

Datei.txt V2

Datei.txt V1

Datei.txt V1

git checkout – Datei.txt

Datei.txt V1

Datei.txt V1

Datei.txt V1

Änderungen im Workspace rückgängig machen

touch Datei2.txt

Datei.txt V2
Datei2.txt V1

Datei.txt V1

Datei.txt V1

clean –f

Datei.txt V1

Datei.txt V1

Datei.txt V1

Workspace auf Stand der Staging-Area zurücksetzen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git checkout – Datei.txt

Datei.txt V1

Datei.txt V1

Datei.txt V1

Workspace und Staging-Area auf aktuellen Stand des Repositories zurücksetzen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git add Datei.txt

Datei.txt V2

Datei.txt V2

Datei.txt V1

git reset –hard

Datei.txt V1

Datei.txt V1

Datei.txt V1

Workspace, Staging-Area und Repository auf vorigen Stand (seit dem letzten Commit) zurücksetzen

vi Datei.txt

Datei.txt V2

Datei.txt V1

Datei.txt V1

git commit –a

Datei.txt V2

Datei.txt V2

Datei.txt V2

git reset –hard HEAD~1
(Hinweis: HEAD~2 setzt auf den vorletzten Commit zurück etc.)

Datei.txt V1

Datei.txt V1

Datei.txt V1

 

Änderungen anschauen:

  • git status: zeigt Änderungen im Workspace und in der Staging-Area an, die durchzuführen sind.
  • git log: zeigt die Commits im Repository an
  • git diff: zeigt die Unterschiede zwischen Workspace und Index (Staging-Area)
  • git diff HEAD: zeigt die Änderungen zwischen Workspace und Repository

 

Hochladen/Einchecken

Will man das lokale Git-Repository auf einen Server laden, führt man den Befehl „push“ aus. Beim erstenmal muss man mitteilen in welchen Branch auf dem „Hauptrepository“ die Arbeitskopie landen soll:

git push origin master

 

Versionierung/Tags

Mit dem Befehl „git tag -a“ kennzeichnet man einen Commit, also einen Stand im lokalen Git-Repository.

Beispiel:

git tag -a v1.0.0 -m „Creating the first official version.“

Will man sich vorher überzeugen, welche Dateien in den Tag aufgenommen werden, kann man den Befehl „git ls-files“ verwenden.

Um die vorhandenen Tags aufzulisten, kann man den Befehl „git tag“ verwenden. Danach kann man sich mit „git tag –v“ Details zu einem Tag anschauen:

git tag –v v1.0.0

Mit dem Befehl „git show“ kann man sich die Änderungen im lokalen Repository anschauen:

git show v1.0.0

Um einen bestimmten, getaggten Versionsstand in der Staging-Area und im Workspace auszuchecken, kann man „git checkout“ verwenden:

git checkout v1.0.0

Tags kann man auch löschen, hierzu dient der Befehl „git tag –d“

git tag –d v1.0.0

Für die Synchronisation mit einem remote Git-Repository dienen die Befehle

git push

git push –tags

git fetch

git fetch –tags

 

Entwicklungszweige/Branches

Ein Entwicklungszweig (Branch) ist eine Verzweigung in einem Projekt, die parallel zum bestehenden Hauptzweig erstellt wird. Hat man mehrere Entwicklungszweige zu pflegen, wie beispielsweise stable oder testing, kann man sich der Branches bedienen. Um bestehende Branches anzuzeigen, gibt man den Befehl „git branch“ ein. 

 

Will man einen neuen Branch anlegen, verwendet man den Befehl „git branch“:

git branch Branchname

 

Beispiel:

git branch testing

 

Will man zu einem bestimmten Branch wechseln, verwendet man den Befehl „git checkout“:

git checkout Branchname

 

Beispiele:

git checkout testing

git checkout master

 

Um einen Branch zu löschen, verwendet man den Befehl

git branch –d Branchname

 

Um einen Branch auf ein bekanntes remote Git-Repository zu schieben, dient der Befehl:

git push origin Branchname

 Beispiel:

git push origin testing

 

Um den Branch auf dem remote Git-Repository wieder zu löschen, dient der Befehl:

git push origin :Branchname

 Beispiel:

git push origin :testing

 

Um sich nur Branches im lokalen Git-Repository anzuzeigen, verwendet man den Befehl:

git branch –a

Um sich nur Branches im remote Git-Repository anzuzeigen, verwendet man den Befehl:

git branch –r

 

Dateien im Workspace ignorieren

Die Datei „.gitignore“ gibt vor, welche Dateien von Git ignoriert werden sollen. Man kann diese Datei im Hauptverzeichnis des Workspaces anlegen, aber auch in den Unterverzeichnissen.

 

Beispiel einer Datei „.gitignore“:

# Can ignore specific files

.DS_Store

 

# Use wildcards as well

*~

*.swp

 

# Can also ignore all directories and files in a directory.

tmp/**/*

 

Man kann auch eine .gitignore Datei im HOME Verzeichnis anlegen. Sie betrifft dann alle Repositories, sofern sie durch folgenden (globalen) Git-Befehl aktiviert wird:

git config –global core.excludesfile ~/.gitignore

 

Server-Funktionalität einrichten

Wie bereits erwähnt handelt es sich bei Git um eine Peer-To-Peer-Lösung, ein Server ist also grundsätzlich nicht erforderlich. Aber was hält uns davon ab ein „Hauptrepository“ einzurichten, das zentral aller Versionsstände aller Projektes speichert?

Es gibt viele Möglichkeiten ein „Hauptrepository“ zu teilen, siehe auch: „8 ways to share your git repository“.

 

Der von mir präferierte Weg sieh wiefolgt aus…

Benutzer und Gruppen einrichten

Es ist sinnvoll auf dem Server eine Art-Git-Administrator einzurichten, z.B. den User „git“, der für alle zentralen Repository-Aufgaben zuständig ist. Zudem sollte man eine (oder mehrere) Gruppen einrichten, die Zugriff auf die Repositories erhalten, beispielsweise die Gruppe „developers“.

  1. Einrichten eines User „git“ und einer Gruppe „git“
    sudo adduser git
  2. Einrichten der Gruppe „developers“
    sudo addgroup developers
  3. Hinzufügen alle Accounts, die zur Gruppe „devlopers“ gehören sollen
    vi /etc/group

 

Zentrales Repository einrichten

Ein zentrales Git-Repository auf einem Server, wird wie ein lokales Git-Repository eingerichtet. Für alle Aufgaben im zentralen Git-Repository verwenden wir den zuvor angelegten Benutzer „git“.

Man legt für diesen User ein Hauptverzeichnis „repo“ an unter dem alle Repositories als Unterverzeichnisse abgelegt werden.

Beispiel:

su – git

mkdir ~/repositories

cd repositories

Danach erstellt man für jedes Projekt ein leeres Unterverzeichnis und ordnet es der entsprechenden Gruppe zu.

mkdir testprojekt.git

sudo chgrp developers testprojekt.git

sudo chmod g+rws    (Sticky-Bit nicht vergessen)

cd testprojekt.git

Hinweis: Es ist weit verbreitet, das zentrale Repositories mit dem Suffix „.git“ zu versehen, um sie als Git-Repositories kenntlich zu machen.

Danach initialisiert man das zentrale Repository mit dem Befehl „init“ und dem Schalter „bare“: Damit vermeidet man, dass eine Arbeitskopie erstellt wird und damit unnötige Git-Hilfsdateien erzeugt werden. Das zentrale Repository ist dann auch nicht dafür geeignet, direkt damit zu arbeiten. Man muss vorher das entsprechende Projekt auf einem Client auschecken, also ein lokales Git-Repository erzeugen. Zusätzlich wird noch der Schalter „—shared“ mitgegeben, damit können alle Gruppenmitglieder auf das Repository zugreifen.

sudo git init –bare –shared

 

Lokales Repository mit dem Hauptrepository auf dem Server verlinken

Ein lokales Repository kann nun zum zentralen Repository übertragen werden. Dazu wechselt man auf dem Client in das lokale Repository und setzt zunächst das origin:

cd testprojekt

git remote add origin ssh://:/~/repos/testprojekt.git

 

Lokales Repository zum Server hochladen (Einchecken)

Damit wird dem lokalen Repository mitgeteilt, auf welchem Server sich das „Original“ bzw. die zentrale „Quelle“, also das Hauptrepository befindet.

Danach schiebt man den Inhalt des lokalen Repositories auf den Server mit „push“:

git push origin master

Beim ersten mal muss der Hauptbranch „master“ mitgegeben werden.

Man kann auch von einem bestimmten Branch (Entwicklungszeig) im lokalen Repository auf einen bestimmten Branch im Hauptrepository „pushen“:

git push origin :

Beispiel: git push origin master:master

Hier kann auch ein komplett neuer Remote-Branch angelegt werden, indem master:neuerBranchName verwendet wird.

 

Hauptrepository (Server) auf Client auschecken

Um ein Hauptrepository auf einem Client auszuchecken, ist folgender Befehl notwendig:

git clone ssh://@/home/user/development/git/repo

Beispiel:

git clone ssh://juergen@aspire/~git/repositories/testprojekt.git

oder

git clone @:~git/repositories/

Beispiel:

git clone juergen@aspire:~git/repositories/testprojekt.git

Es wird dann auf dem Client ein Verzeichnis ohne den Suffix „.git“ angelegt

 

 

Anhang

 

Übersicht Workflow

Git_Workflow

 

 

Links

Git Homepage: http://git-scm.com

Ubuntu-Git Wiki:http://wiki.ubuntuusers.de/Git

http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository  

Homepdate Git for Windows: http://msysgit.github.com

Michael’s Git Tutorial – Setting Up a Git Server:  http://www.youtube.com/watch?v=SyMkLQLC3Kg  

This post is not available in english! Sorry!

 
Kommentare deaktiviert für Git: Kurzanleitung "Fit für Git" ;-)

Verfasst von - Januar 12, 2013 in IT, Linux, Softwareentwicklung, Windows

 

Schlagwörter: , ,

SAP Netweaver AS Java: Deployment von ear Dateien

SAP Netweaver AS Java: Deployment von ear Dateien

Motivation

Es gibt so viele Dateiformate für das Deployment auf Applikationsservern, insbesondere in der SAP Umgebung, da verliert man mal schnell den Überblick. Ich habe im Artikel Dateiformate für Web-Applikationen (EAR, JAR, WAR etc.) schon einen Einblick in die „üblichen Verdächtigen“ gegeben. Beim SAP Netweaver AS Java wird das Ganze noch einmal etwas komplizierter. Hier darf man sich noch mit sca und sda Dateien herumschlagen.

Die Frage nach dem Warum und Weshalb bleibt dem Schöpfer überlassen.

Doing

Wie macht man aber nun aus einem ear File eine SAP konforme sca-Datei ?

  1. NWPACKTOOL aus Hinweis 1223957 installieren (SUSER erforderlich)
  2. Aus .ear file ein SDA file machen (hat dann weiterhin die Endung .ear)
  3. sda File erstellen:

    createsda –n jndi name –v vendor name –l jndi name –c 2 –type J2EE SourceEarFileLocation TargetSDAFileLocation

    – JNDI name/application name : same as that u have mentioned under ejb-j2ee-engine.xml while developing the module(like „ModuleDeploy“)

    – Vendor name: can be anything like „pi.module“ (but it should be less than 20 characters).

    – SourceEarFileLocation: Give the EAR file location.

    – TargetSDAFileLocation: Mentioned the location where you want to create ur SDA file.

    Beispiel:
    createsda –n ModuleDeploy –v pi.module –l ModuleDeploy –c 2 –type J2EE C:EARTest.ear c:result8SDATest

  4. sca file erstellen:
    packsca –n SCName –v Vendor –l location (z.B. Kunde) –r Release (z.B. 1.0) –sp Service Level (z.B. 1)  –pl Patch Level (z.B. ) –da Quellverzeichnis mit sda Dateien –includingsubdirs Zieldatei (sca)

    Beispiel: 
    A SCA named di_test.sca is created. It contains every SDA located in the directory c:testsda and its subdirectories. Also, every build archive located in the directory c:testbas and its subdirectories is packed into the resulting SCA:

    packsca –n di_test –v test.com – l testfactory –c 12 –r 6.45 –sp 2 –pl 0 –da c:testsda –ba c:testbas –includingsubdirs c:di_test.sca

     

Fazit

 Warum einfach, wenn es auch kompliziert geht? Ist halt SAP, da muss es einfach etwas komplizierter sein 😉

Links

Erstellen von SDA- und SCA-Archiven

Convert EAR file to SDA file

packsca

 

Schlagwörter: , , , ,

SAP NW IdM: Zugriff auf die IdM DataSource mit Java

SAP NW IdM: Zugriff auf die IdM DataSource mit Java

Motivation

Um auf die IdM Datenbank von einem SAP NW AS Java zuzugreifen, kann man sich eine DataSource anlegen. Wenn man sich auf dem AS Java befindet, auf dem die UI für IdM deployed ist, kann man die vorhandene DataSource nutzen. Bei Verwendung der DataSource hat man gegenüber dem „DriverManager“ den Vorteil, dass alle Verbindungsparameter zentral im Applikationsserver definiert werden können, man benötigt also im Code keine Parameter für beispielsweise Username, Passwort etc.

Vorgehensweise

Dazu startet man den Netweaver Administrator (NWA)  und geht auf: Konfiguration > Infrastruktur > Anwendungsressourcen:

Falls vorhanden, sollte man auf dem AS Java für die IdM UI folgende DataSource vorfinden: 

 

Die folgende Einstellungen besitzt:

Um nun eine DataSource anzulegen, geht man wie folgt vor:

Anlegen einer neuen Ressource vom Typ „Neue JDBC-Custom-DataSource“:

Anschließend übernimmt man die o.g. Einstellungen.

Wenn man eine Applikation deployed, die auf diese Ressource bzw. Datenbank zugreifen soll, kann man das relativ einfach, mit folgenden Code erledigen. Im Beispiel wird davon ausgegangen, dass eine DataSource mit Namen „IDM_DataSource“ angelegt wurde bzw. existiert:

import java.sql.*;
import javax.naming.*;
import javax.sql.*;

final class GetConnection {

  /** Uses JNDI and Datasource (preferred style).   */
  static Connection getJNDIConnection(){
    String DATASOURCE_CONTEXT = "jdbc/IDM_DataSource";

    Connection result = null;
    try {
      Context initialContext = new InitialContext();
      if ( initialContext == null){
        log("JNDI problem. Cannot get InitialContext.");
      }
      DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
      if (datasource != null) {
        result = datasource.getConnection();
      }
      else {
        log("Failed to lookup datasource.");
      }
    }
    catch ( NamingException ex ) {
      log("Cannot get connection: " + ex);
    }
    catch(SQLException ex){
      log("Cannot get connection: " + ex);
    }
    return result;
  }
...
}

Als Vergleich: die konventionelle Vorgehensweise über den DriverManager am Beispiel MySQL:

import java.sql.*;
import javax.naming.*;
import javax.sql.*;

final class GetConnection {

  /** Uses DriverManager.  */
  static Connection getSimpleConnection() {
    //See your driver documentation for the proper format of this string :
    String DB_CONN_STRING = "jdbc:mysql://localhost:3306/airplanes";
    //Provided by your driver documentation. In this case, a MySql driver is used : 
    String DRIVER_CLASS_NAME = "org.gjt.mm.mysql.Driver";
    String USER_NAME = "juliex";
    String PASSWORD = "ui893djf";
    
    Connection result = null;
    try {
       Class.forName(DRIVER_CLASS_NAME).newInstance();
    }
    catch (Exception ex){
       log("Check classpath. Cannot load db driver: " + DRIVER_CLASS_NAME);
    }

    try {
      result = DriverManager.getConnection(DB_CONN_STRING, USER_NAME, PASSWORD);
    }
    catch (SQLException e){
       log( "Driver loaded, but cannot connect to db: " + DB_CONN_STRING);
    }
    return result;
  }
...
}

Egal, für welchen Weg man sich entscheidet (DataSource im AS Java oder DriverManager), es wird ein Handle auf die Datenbank vom Typ „Connection“ zurückgegeben. Mit „Connection“ kann man dann alle üblichen Operationen (SQL-Statements etc.) auf der Datenbank ausführen, siehe „Lesson: JDBC Basics„.

Fazit

Im Interesse der Wartbarkeit eines Systems sollte man bei Verwendung eines Applikationsservers (egal ob IBM Websphere, SAP Netweaver, JBoss etc.) immer den Weg der DataSource gegenüber dem „DriverManager“ vorziehen. Man macht seinen Code dadurch flexibler und unabhängig von irgendwelchen systemspezifischen Einstellungen.

motivation

To connect to the IdM (Identity Management) database of SAP NW IdM you can use the ‚old-style‘ ‚DriverManager‘ class or you can use the ‚DataSource“ mechansim provided by SAP NetWeaver AS Java. Wenn man sich auf dem AS Java befindet, auf dem die UI für IdM deployed ist, kann man die vorhandene DataSource nutzen. Bei Verwendung der DataSource hat man gegenüber dem „DriverManager“ den Vorteil, dass alle Verbindungsparameter zentral im Applikationsserver definiert werden können, man benötigt also im Code keine Parameter für beispielsweise Username, Passwort etc.

Vorgehensweise

Dazu startet man den Netweaver Administrator (NWA)  und geht auf: Konfiguration > Infrastruktur > Anwendungsressourcen:

Falls vorhanden, sollte man auf dem AS Java für die IdM UI folgende DataSource vorfinden: 

 

Die folgende Einstellungen besitzt:

Um nun eine DataSource anzulegen, geht man wie folgt vor:

Anlegen einer neuen Ressource vom Typ „Neue JDBC-Custom-DataSource“:

Anschließend übernimmt man die o.g. Einstellungen.

Wenn man eine Applikation deployed, die auf diese Ressource bzw. Datenbank zugreifen soll, kann man das relativ einfach, mit folgenden Code erledigen. Im Beispiel wird davon ausgegangen, dass eine DataSource mit Namen „IDM_DataSource“ angelegt wurde bzw. existiert:

import java.sql.*;
import javax.naming.*;
import javax.sql.*;

final class GetConnection {

  /** Uses JNDI and Datasource (preferred style).   */
  static Connection getJNDIConnection(){
    String DATASOURCE_CONTEXT = "jdbc/IDM_DataSource";

    Connection result = null;
    try {
      Context initialContext = new InitialContext();
      if ( initialContext == null){
        log("JNDI problem. Cannot get InitialContext.");
      }
      DataSource datasource = (DataSource)initialContext.lookup(DATASOURCE_CONTEXT);
      if (datasource != null) {
        result = datasource.getConnection();
      }
      else {
        log("Failed to lookup datasource.");
      }
    }
    catch ( NamingException ex ) {
      log("Cannot get connection: " + ex);
    }
    catch(SQLException ex){
      log("Cannot get connection: " + ex);
    }
    return result;
  }
...
}

Als Vergleich: die konventionelle Vorgehensweise über den DriverManager am Beispiel MySQL:

import java.sql.*;
import javax.naming.*;
import javax.sql.*;

final class GetConnection {

  /** Uses DriverManager.  */
  static Connection getSimpleConnection() {
    //See your driver documentation for the proper format of this string :
    String DB_CONN_STRING = "jdbc:mysql://localhost:3306/airplanes";
    //Provided by your driver documentation. In this case, a MySql driver is used : 
    String DRIVER_CLASS_NAME = "org.gjt.mm.mysql.Driver";
    String USER_NAME = "juliex";
    String PASSWORD = "ui893djf";
    
    Connection result = null;
    try {
       Class.forName(DRIVER_CLASS_NAME).newInstance();
    }
    catch (Exception ex){
       log("Check classpath. Cannot load db driver: " + DRIVER_CLASS_NAME);
    }

    try {
      result = DriverManager.getConnection(DB_CONN_STRING, USER_NAME, PASSWORD);
    }
    catch (SQLException e){
       log( "Driver loaded, but cannot connect to db: " + DB_CONN_STRING);
    }
    return result;
  }
...
}

Egal, für welchen Weg man sich entscheidet (DataSource im AS Java oder DriverManager), es wird ein Handle auf die Datenbank vom Typ „Connection“ zurückgegeben. Mit „Connection“ kann man dann alle üblichen Operationen (SQL-Statements etc.) auf der Datenbank ausführen, siehe „Lesson: JDBC Basics„.

Fazit

Im Interesse der Wartbarkeit eines Systems sollte man bei Verwendung eines Applikationsservers (egal ob IBM Websphere, SAP Netweaver, JBoss etc.) immer den Weg der DataSource gegenüber dem „DriverManager“ vorziehen. Man macht seinen Code dadurch flexibler und unabhängig von irgendwelchen systemspezifischen Einstellungen.

 

Schlagwörter: , , , , , ,