Git Einrichtung
Geschrieben von cartmen in Linux, tags: Branch, einrichten, Einrichtung, Git, Howto, Linux, SVN, Versionskontrolle, ZweigGit ist ein neuartiges Versionskontrollsystem ähnlich SVN oder CVS, ist allerdings deutlich performanter und leistungsstärker. Ich verwendete SVN lange Zeit, vermisste aber die Möglichkeit Daten nach stabil und instabil zu trennen und im instabilen Zweig neue Dinge auszuprobieren. Dies ist eine der vielen Stärken von Git. Weitere Informationen können bei Wikipedia nachgelesen werden. Siehe: http://de.wikipedia.org/wiki/Git
Jetzt werde ich die Installation und Handhabung von Git vorstellen. Dazu stellen wir uns einmal folgendes Szenario vor: Wir haben einen zentralen Server und zwei Rechner, auf denen wir programmieren. Die Erklärungen zu den einzelnen Befehlen befinden sich ganz unten. Wichtig anzumerken ist noch, dass ich Git in dieser Beschreibung mit SSH verwende. Es ist selbstverständlich auch möglich Git ohne SSH zu verwenden. Dazu muss einfach statt git+ssh nur noch git geschrieben werden. Viele Funktionen von Git, wie die Userverwaltung, das Zurücknehmen von Änderungen und Problembehandlung kommen hier zu kurz. Diese können in weiterführender Literatur erlesen werden.
Installation der Pakete
server:$ sudo aptitude install git git-daemon-run
clients:$ sudo aptitude install git git-gui
Repository anlegen
server:$ cd /srv/git
server:/srv/git$ mkdir repository && cd repository
server:/srv/git/repository$ git init –shared
server:/srv/git/repository$ touch README
server:/srv/git/repository$ git add README
server:/srv/git/repository$ git commit -m “Readme fuer Repository angelegt”
server:/srv/git/repository$ git branch testing
Arbeiten auf den Clients
Repository auschecken
clients:$ git clone git+ssh://server/srv/git/repository kopie
clients:$ cd kopie && ls
Ausgabe: README
Entwicklungszweig wechseln
clients:/home/user/kopie$ git checkout origin/testing -b testing
client1:/home/user/kopie$ neue Dateien schreiben/editieren
client1:/home/user/kopie$ ls
Ausgabe: README neu1 neu2
client1:/home/user/kopie$ git status
Ausgabe:
# On branch testing
# Untracked files:
# (use “git add <file>…” to include in what will be committed)
#
# neu1
# neu2
nothing added to commit but untracked files present (use “git add” to track)
client1:/home/user/kopie$ git add neu1 neu2
client1:/home/user/kopie$ git status
Ausgabe:
# On branch testing
# Changes to be committed:
# (use “git reset HEAD <file>…” to unstage)
#
# new file: neu1
# new file: neu2
#
client1:/home/user/kopie$ git commit -m “neu1 und neu2 zu testing Zweig hinzugefuegt”
Ausgabe:
Created commit 442de5a: neu1 und neu2 zu testing Zweig hinzugefuegt
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 neu1
create mode 100644 neu2
client1:/home/user/kopie$ git push
Ausgabe:
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 275 bytes, done.
Total 2 (delta 1), reused 0 (delta 0)
To git+ssh://server/srv/git/repository
16e3d85..442de5a testing -> testing
Daten aktualisieren
client2:/home/user/kopie$ ls
Ausgabe: README
client2:/home/user/kopie$ git pull
Ausgabe:
Unpacking objects: 100% (2/2), done.
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0)
From git+ssh://server/srv/git/repository
16e3d85..442de5a testing -> origin/testing
Updating 16e3d85..442de5a
Fast forward
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 neu1
create mode 100644 neu2
client2:/home/user/kopie$ ls
Ausgabe: neu1 neu2 README
Testing-Zweig in Master-Zweig überführen
client1:/home/user/kopie$ git checkout master
Ausgabe: Switched to branch “master”
client1:/home/user/kopie$ git merge testing
Ausgabe:
Updating 344a2f4..bbb1f21
Fast forward
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 neu1
create mode 100644 neu2
client1:/home/user/kopie$ git push
Ausgabe:
Total 0 (delta 0), reused 0 (delta 0)
To git+ssh://server/srv/git/repository
c7b386a..7d9f83a master -> master
Subversion grafisch betrachten
client2:/home/user/kopie$ gitk
Erklärungen zu den Befehlen
- git init –shared: Erstellt das Repository im aktuellen Verzeichnis. Dieses ist für mehrere Programmierer gedacht, die am Projekt arbeiten, was in unserem Szenario der Fall ist.
- git branch testing: Erstellt den Zweig (branch) testing.
- touch README: Erstellt eine leere Datei mit dem Namen README im aktuellen Verzeichnis.
- git add README: Fügt die Datei README zur Versionskontrolle hinzu. Dies ist notwendig um die Daten committen zu können.
- git commit -m “Nachricht”: Veröffentlicht den aktuellen Status und speichert diesen als Sicherungspunkt. Es werden dabei keine Änderungen an den Server gesandt.
- git clone git+ssh://server/srv/git/repository kopie: Speichert eine Kopie des Repositories im Verzeichnis kopie. Dieses Verzeichnis darf vor dem Befehl noch nicht existieren. Es werden alle Sicherungspunkte heruntergeladen.
- git checkout origin/testing -b testing: Erstelle einen neuen lokalen Zweig mit dem Name testing und den Daten aus origin/testing. Danach wechselt er in den Zweig testing.
- git status: Gibt den Status aus.
- git push: Sendet die geänderten Daten an den Server.
- git pull: Aktualisiert die lokalen Daten und lädt diese vom Server.
- git checkout master: Wechselt in den Master-Zweig.
- git merge testing: Überführt alle Daten aus dem Testing Zweig in den aktuell gewählten Zweig.
- gitk: Öffnet das grafische Git-Frontend.
Migration von SVN nach Git
server:$ sudo aptitude install git-svn # Paket für git-svn installieren. Wird benötigt um Daten zu migrieren.
server:/srv/git/repository$ git-svn init –share -T svn+ssh://alter_svn_server/srv/svn/repository # Initialisiert das neue Git Repository mit den alten SVN Daten. Es werden hierbei noch keine Daten ausgetauscht.
server:/srv/git/repository$ git-svn fetch # Lädt die Dateien vom SVN Server und passt diese für Git an.
Einträge (RSS)