Tutorials - git
Sprachenübersicht/Programmierung
git
Diese Seite wurde 112455 mal aufgerufen.
Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.
Editieren Versionen Linkpartnerschaft Bottom Printversion
Keywords: git revision control system
Inhaltsverzeichnis
git ist das Revision Control System von Linus Torvalds. Es entstand aus dem Bedürfnis heraus, ein geeignetes RCS für die Entwicklung des Linux Kernels zu finden. Den verfügbaren opensource RCS mangelte es entweder an Performance oder an Flexibilität, weshalb Linus die Entwicklung eines neuen, verteilten Systems begann.
Doch zunächst, was ist ein RCS und wofür wird es benötigt?
Bei der Entwicklung größerer Software-Projekte ist es von Vorteil, wenn mehrere Entwicklungsstände gesichert und jederzeit wiederhergestellt werden können. Zusätzlich können mehrere Entwicklungszweige gleichzeitig bestehen, die dann schlussendlich wieder in einen Entwicklungsbaum zusammengeführt werden müssen. Weitere Bedürfnisse nach einem RCS ergeben sich automatisch, wenn mehrere Programmierer gleichzeitig ein einem Projekt beteiligt sind.
Dieses Tutorial soll nur eine kurze Einführung beim Umgang mit git sein und erstetzt nicht das Lesen der Manpages.
- branch - Enwicklungszweig (z.B. stable, und test)
der Standardbranch ist master
- commit - gesicherter Entwicklungsstand
- HEAD - Entwicklungsstand des letzten Commit, man kann durch anhängen von ^ auf den vorletzten Commit, bzw. mit ^^ auf den vorvorletzten (usw.) zugegriffen werden
Wird lediglich der Befehl git angegeben, erscheint eine Liste mit den gebräuchlisten Befehlen.
Code:
glua@ike ~ $ git
Usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--help] COMMAND [ ARGS ]
The most commonly used git commands are:
add Add files to the index file
apply Apply patch on a git index file and a work tree
bisect Find the change that introduced a bug
branch List, create, or delete branches.
checkout Checkout and switch to a branch
cherry-pick Apply the change introduced by an existing commit
clone Clones a repository
commit Record your changes
diff Show changes between commits, commit and working tree, etc
fetch Download objects and a head from another repository
grep Print lines matching a pattern
init-db Creates an empty git repository
log Show commit logs
merge Grand Unified Merge Driver
mv Move or rename a file, directory or symlink
prune Prunes all unreachable objects from the object database
pull Pull and merge from another repository
push Update remote refs along with associated objects
rebase Rebase local commits to a new head
reset Reset current HEAD to the specified state
revert Revert an existing commit
rm Remove files from the working tree and from the index
show Show one commit with difference it introduces
show-branch Show branches and their commits
status Show working tree status
tag Create a tag object signed with GPG
verify-tag Check the GPG signature of tag
(use 'git help -a' to get a list of all installed git commands)
Üblicherweise gibt es keinen Unterschied zwischen z.B. git status und git-status.
Nachdem git erfolgreich installiert wurde (es müsste mitlerweile in jeder Distribution enthalten sein), erstellt man zunächt ein Verzeichnis, in welchem man folgenden Befehl ausführt:
Code:
glua@ike ~ $ mkdir git-test
glua@ike ~ $ cd git-test/
glua@ike ~/git-test $ git init-db
defaulting to local storage area
glua@ike ~/git-test $
Nun wurde in diesem Verzeichnis ein versteckter Ordner namens .git erstellt, in welchem nun sämtliche Hintergrundinformationen für git gespeichert werden.
Weiters befindet sich dort die Datei config, in welcher ein paar grundlegende Einstellungen vorgenommen werden können.
Code:
glua@ike ~/git-test $ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
[user]
name="Julian Golderer"
email="email@4-mail.net"
Nun erstellen wir im aktuellen Verzeichnis irgendeine Datei (z.B.: echo "Hallo" > readme) und fügen das ganze Verzeichnis mit dem Befehl git add . zum Repository hinzu (wird wiederum eine neue Datei erstellt, muss der Befehl evtl. nochmal wiederholt werden).
Abschließend speichern wir unseren 1. Arbeitsstand mit git commit.
Code:
glua@ike ~/git-test $ git commit -a -m "1. commit"
Durch den Parameter -a werden alle Dateistände gespeichert, und mit -m kann eine Nachricht angegeben werden. Wird -m weggelassen, so erscheint ein Editor zur Eingabe einer Nachricht.
Es ist auch möglich, einem Commit einen Namen zu geben. Dazu wird der Befehl git tag verwendet.
Code:
glua@ide ~/git-test $ git tag v0.1
Dieser kann dann mit git tag -d v0.1 wieder gelöscht werden.
Eines der wichtigsten Features ist natürlich das Anzeigen von Änderungen. Dazu gibt es mehrere Möglichkeiten:
git log - zeigt eine Liste aller Commits
git show - zeigt diff des letzten Commits gegenüber dem vorletzten
git diff - zeigt die Unterschiede zwischen dem derzeitigen Stand und dem letzten git update-index
git diff HEAD - zeigt die Underschiede zwischem dem derzeitigen Stand und dem letzten Commit
git diff v0.1 HEAD - zeigt die Unterschiede zwischen dem letzten Commit und des 'v0.1'-genannten Commits
Es ist auch möglich, Unterschiede zwischen verschiedenen Branches anzeigen zu lassen, z.B. git diff master test.
Um eine neue Funktion auszuprobieren, kann es recht hilfreich sein, dafür einen eigenen Entwicklungszweig (Branch) anzulegen.
Code:
glua@ike ~/git-test $ git branch testing
glua@ike ~/git-test $ git branch
* master
testing
Mit git checkout testing wird nun in den testing-branch gewechselt.
Beim Wechseln zwischen verschiedenen Zweigen muss vorher ein Commit stattfinden, um die Änderungen zu speichern. Um bei Unterbrechungen, welche einen Wechsel des Branches zur Folge haben, unschöne Commits zu vermeiden, empfiehlt es sich, die man-page zu git reset anzuschauen.
Ist beispielsweise die Entwicklung am testing-Branch abgeschlossen, so sollte dieser wieder mit dem master-Branch vereinigt werden.
Code:
glua@ike ~/git-test $ git checkout master
glua@ike ~/git-test $ git pull . testing
Kommt es dabei zu Problemen, muss die entsprechende Datei in einem Editor geöffnet werden. Dort werden dann die konkurrierenden Zeilen angezeigt. Ist der Fehler bereinigt, kann der aktuelle Status mit einem Commit gespeichert werden.
Über die Konfigurationsdatei .git/info/exclude ist es möglich, Dateien von der Überwachung durch git auszuschließen. Dies ist beispielsweise bei temporären Sicherungsdateien (datei.php~) oder Dateien mit geheimen Konfigurationseinstellungen (MySQL-Passwörter, ..) hilfreich. Die Einträge dürfen dabei reguläre Ausdrücke enthalten.
Dateien können auch auf Verzeichnisebene unterschiedlich behandelt werden. Diese Einstellungen werden dann in der Datei .gitignore des jeweiligen Verzeichnisses hinterlegt.
Als Entwickler ist es natürlich wichtig, immer das aktuelle Repository zu besitzen. Liegt noch kein lokales vor, so wird über folgenden Befehl das Verzeichnis gespiegelt.
Code:
glua@ike ~ $ git clone git://localhost/ git-clone
Generating pack...
Done counting 73 objects.
Deltifying 73 objects.
100% (73/73) done
Total 73, written 73 (delta 10), reused 0 (delta 0)
glua@ike ~/git-clone $ git branch -a
* master
origin/HEAD
origin/master
origin/testing
Dabei werden automatisch neue Branches namens origin/<branch> erzeugt, die die Orginalversion enthalten. Um später das Verzeichnis zu aktualisieren, genügt es, git pull auszuführen.
Beispiel:
glua@ike ~/git-clone $ git pull
Generating pack...
Done counting 9 objects.
Result has 4 objects.
Deltifying 4 objects.
100% (4/4) done
Total 4, written 4 (delta 1), reused 0 (delta 0)
Unpacking 4 objects
100% (4/4) done
Updating from 2862f923d4960887dfd42c2eff71809fbd04ba0e to 764cc99a9066b33ea9d8d535254843b20b003acb
Fast forward
testdatei | 1 +
readme | 1 +
2 files changed, 2 insertions(+), 0 deletions(-)
Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?
Editieren Versionen Linkpartnerschaft Top Printversion
Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden
Sprachenübersicht/Programmierung/git