Git

Wechseln zu: Navigation, Suche

Allgemeines

"Git" oder "git"

Ist eigentlich egal. Auf der homepage wird es "Git" geschrieben, "git" findet man aber genauso häufig. Persönlich finde ich "git" geekiger. Außerdem wird es auf der Kommandozeile auch wieder nur "git" geschrieben.

Git Hilfe

Manpages ftw!

$ man git-COMMAND #z.B. man git-init

Die Dokumentation ist aber auch sehr schön. Schaut euch den Google Tech Talk"Linus Torvalds on git" an - sehenswert!

Tutorial

Git installieren und einrichten

Git installieren (via apt (Debian-Paket "git-core"), mac-ports, etc.) Download

Git global konfigurieren:

$ git config --global user.name "Your Name Comes Here"
$ git config --global user.email you@yourdomain.example.com
$ git config --global core.autocrlf input

Die dritte Zeile dürfte für Mac und Linux User wichtig sein. Hier wird verhindert, dass Windows line endings (CRLF) eure (LF) überschreiben. Dies kann beispielsweise beim Ausführen von shell scripts zu Problemen führen. Mehr Infos hierzu gibt es bei GitHub.

Mehr zur Konfiguration gibt's u.a. in diesem Git guide. Mögliche Probleme mit der Option core.autocrlf beschreibt stackoverflow. Persönlich nutze ich core.autocrlf=input.

Git Repository einrichten

Git im Rootordner des Projekts initialisieren:

$ git init

Optional, aber sehr zu empfehlen - .gitignore einrichten:

$ vim .gitignore

Beispieldatei 1:

.DS_Store #dies ist ein Kommentar
#ein paar Eclipse Files und Folder
.classpath 
.project
.pydevproject
bin

Beispieldatei 2:

#ignoriere
* #ALLES
!src #ausser dem angegebenen Ordner</source>

Dateien in den Git-Index aufnehmen:
<source lang="bash">$ touch README
$ git add .

Vorhandenes Git Repository laden

$ git clone GIT_URL [foldername_for_repository]

Nur die aktuelle Version des Repositories laden (praktisch für große Repos):

$ git clone --depth 1 GIT_URL [foldername_for_repository]

Allowed GIT_URLs: [1]

Git remote für den privaten Gebrauch einrichten

Auf dem Server/anderen Rechner:

$ mkdir demo.git
$ cd demo.git
$ git --bare init

In eurem lokalen Repository:

$ git remote add ALIAS REMOTE_URL #z.B. git remote add origin git@example.com:repositories/JCalc.git
$ git push ALIAS BRANCH_NAME # z.B. git push origin master
# oder
$ git push ALIAS --all # --all == alle Branches, Tags, etc.


Git branches

$ git branch        #zeigt alle vorhandenen branches an; '*' = aktueller branch
$ git branch NAME   #erstellt neuen branch NAME
$ git checkout NAME #wechselt in den NAME branch

Einfacher geht es folgendermaßen:

$ git checkout -b NAME #erstellt neuen branch NAME und wechselt dorthin

merging

Merging ist das Zusammenführen verschiedener Branches. Angenommen wir haben in unserem Beispiel 2 Branches (master und dev) und wir befinden uns im master branch, so läuft das merging folgendermaßen ab:

$ git merge BRANCH #hier: BRANCH = 'dev'

Im Prinzip könnte dies schon alles gewesen sein. Hier kommt es darauf an, ob Konflikte zwischen verschiedenen Dateiversionen existieren. Angenommen, es gibt keine Konflikte hat git hier bereits automatisch ein git commit durchgeführt und wir können mit der aktuellen Version weiterarbeiten.

manuelles merging von einzelnen Dateien

---noch nicht fertig (git difftool)---

remote branches loswerden

$ git push REMOTENAME :BRANCHNAME #Doppelpunkt ist wichtig!!!
#z.B. git push origin :development

Wichtige Befehle

Hoster

(Reihenfolge hat nichts zu sagen, beide sind gut)

  • GitHub (limit auf 300MB Repositories, danach kostenpflichtig)
  • Gitorious (meines Wissens nach unbeschränkt)

Fehlt was? Diskussionsseite!