• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
git - eine praktische Einführung
 

git - eine praktische Einführung

on

  • 6,591 views

Eine praktische Einführung in git.

Eine praktische Einführung in git.

Statistics

Views

Total Views
6,591
Views on SlideShare
5,404
Embed Views
1,187

Actions

Likes
4
Downloads
0
Comments
0

6 Embeds 1,187

http://blog.marceleichner.de 1154
http://www.webman-company.de 26
http://coderwall.com 3
http://assets.txmblr.com 2
http://translate.googleusercontent.com 1
http://www.soso.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    git - eine praktische Einführung git - eine praktische Einführung Presentation Transcript

    • Eine praktische Einführung
    • Marcel Eichner @ephigeniaSeit 2000 PHP- & Frontend- Entwickler Founder und CxO von foo(bugs)
    • Git ([ɡɪt], engl. Blödmann) ist eine freieSoftware zur verteilten Versionsverwaltungvon Dateien, die von Linus Torwvaldsursprünglich für die Quellcode-Verwaltungdes Linux-Kernels entwickelt wurde.
    • Wieso git?• Klein und schnell!• Schnelles Branching & Merging• Verteilte Repositories (indirekter Backup)• Freie, offene Software• Daten-Sicherheit durch Content-Hashes http://git-scm.com/about/
    • Geschwindigkeit• (fast) Alle Operationen lokal• .git Verzeichnis nur auf root Ebene• http://git-scm.com/ about/small-and-fast
    • Eigenschaften
    • Dezentralität• Klon des kompletten Repositories lokal• ermöglicht andere Workflows• lokales branchen, commiten, reverten etc.
    • Hashes statt Nummern• dezentrale Architektur erlaubt keine fortlaufende Revions-Nummerierung• Inhalte zählen mehr als Struktur• Identifizierung einzelner Commits über Content-Hashes (SHA-1)
    • Nicht-lineare EntwicklungRechner 1 A B Branch Master Remote 1 2 3 Head remote/master (origin)Rechner 2 X Y
    • Vier Ebenen Remote Repository pushpullclone Local Repository commit Stage checkout add Working Directory
    • Praxis
    • KonfigurationEinstellung für Identifikation in git $ git config --global user.name "Marcel Eichner" $ git config --global user.email "marcel.eichner@foobugs.com" # ~/.gitconfig [user] name = Marcel Eichner email = marcel.eichner@foobugs.com
    • Repository erstellenLokales Repository erstellen $ mkdir myrepo $ cd myrepo $ git init Initialized empty Git repository in ../myrepo/.git
    • Arbeiten ...$ echo "Hello World" > index.html
    • git statusAnzeigen aller geänderten und gelöschten Dateien $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: index.html # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: index.html
    • StagingEine oder mehrere bestimmte Dateien stagen $ git add index.html $ git add *.htmlAlle Änderungen stagen (inklusive gelöschter Dateien) $ git add --all
    • CommitÄnderungen in Stage mit einer Nachricht ins lokale Repo comitten $ command git commit -m "My first commit" [master 7626937] changed 1 files changed, 1 insertions(+), 1 deletions(-)
    • Shortcut: Stage & CommitAlle Änderungen stagen und sofort commiten $ git commit -a -m "My Message" [master 7626937] changed 1 files changed, 1 insertions(+), 1 deletions(-)Letzte Commit-Message editieren $ git commit --amend
    • Remote Repo klonengit remote repository in den Ordner "mydir" klonen $ git clone git@192.168.123.212:testing.git mydir Cloning into mydir... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done.
    • Commits hochschiebenAlle commits zum Remote pushen $ git push origin master # Counting objects: 5, done. # Writing objects: 100% (3/3), 272 bytes, done. # Total 3 (delta 0), reused 0 (delta 0) # To git@192.168.123.212:testing.git # edfec50..2fc284e master -> masterAllgemeine Syntax $ git push [remote-name] [remote-branch-name]
    • BranchingBranch anlegen und auschecken $ git branch my-rad-feature $ git checkout my-rad-feature Switched to branch my-rad-feature $ echo "My Branch is different" > index.html $ git commit -a -m "changed content to my branch"
    • Branches listenAlle verfügbaren lokalen branches anzeigen $ git branch master * my-rad-featureAlle verfügbaren branches anzeigen (lokal & remote) $ git branch -a master * my-rad-feature remotes/origin/HEAD -> origin/master remotes/origin/master
    • Branch -> Remote"my-rad-feature"-Branch ins Remote schieben $ git push origin my-rad-feature Counting objects: 6, done. Delta compression using up to 4 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (6/6), 482 bytes, done. Total 6 (delta 0), reused 0 (delta 0) To git@192.168.123.212:testing.git * [new branch] my-rad-feature -> my-rad-feature
    • Änderungen holenAlle Änderungen vom Repository holen $ git pull remote: Counting objects: 7, done. remote: Compressing objects: 100% (4/4), done. remote: Total 4 (delta 2), reused 0 (delta 0) Updating 361303d..f2cd831 Fast forward index.html | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
    • Branch MergingIn den Merge-Ziel-Branch wechseln und mergen # assume we are in branch "my-rad-feature" and everything commited $ git checkout master Switched to branch master $ git merge my-rad-feature Updating edfec50..2bc1785 Fast-forward Än de r u nge n s in dn index.html | 2 +- Re mo te S e r ve r. o ch n ich t au f de m Da 1 files changed, 1 insertions(+), 1 deletions(-) mus s m a n imm m it s ie do rt la n de n e r n o ch e inm a l git push o rigin mast aus füh re n ! er
    • WiederherstellenGelöschte Datei wieder herstellen $ git checkout index.html
    • git remoteLocales Repository mit dem Remote verbinden $ git remote add origin git@192.168.123.212:testing.git $ git push origin master Counting objects: 3, done. Writing objects: 100% (3/3), 231 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@192.168.123.212:testing.git * [new branch] master -> master
    • weitere nützliche Befehle
    • LogLog des gesamten Repositories anzeigen $ git log commit edfec504eb864dc667f3f5b9d301617036d15f3a Author: Marcel Eichner <marcel.eichner@foobugs.com> Date: Thu Jun 7 15:37:26 2012 +0200 My First Commit
    • Log ExtendedAnzeige des Baum-graphen im Log $ git log --graphFilter nach Zeit & Autor $ git log --before="2 weeks ago" --after="2012-04-01" --author="Marcel Eichner"Log einer Datei mit Inhalt Merge $ git log -p index.htmlcommit message filter $ git log --grep="fixed"
    • tagDen aktuellen branch und stand taggen $ git tag "release-2012-11-06_12-30-12"Alle Tags listen $ git tag
    • blameBlame für eine Datei $ git blame index.html 2fc284e5 (Marcel Eichner 2012-06-07 15:43:47 +0200 1) Hello World it’s me!Revision Hash Committer Datum der ÄnderungBlame zu einem bestimmten Zeitpunkt $ git blame index.html [REVISION]
    • help$ git [command] --helpNAME git-blame - Show what revision and author last modified each line of a fileSYNOPSIS git blame [-c] [-b] [-l] [--root] [-t] [-f] [-n] [-s] [-e] [-p] [-w] [--incremental][-L n,m] [-S <revs-file>] [-M] [-C] [-C] [-C] [--since=<date>] [--abbrev=<n>] [<rev> | --contents <file> | --reverse <rev>] [--] <file>DESCRIPTION Annotates each line in the given file with information from the revision which lastmodified the line. Optionally, start annotating from the given revision. The command can also limit the range of lines annotated.
    • ZwischenablageAlle Änderungen in die Zwischenablage des lokalen git Repositories schieben $ git stashÄnderungen wieder zurückholen $ git stash applyListe aller Objekte in Zwischenablage $ git stash listSpezifischen Eintrag (2. Eintrag) aus Zwischenablage wieder herstellen $ git stash apply stash@{1}
    • IgnorierenProjekt-Spezifische ignores $ cat .gitignore # specific files in all directories .DS_Store # wildcards *.tmp # ignore whole directories tmp/**/*globale .gitignore $ git config --global core.excludesfile ~/.gitignore
    • Sub-Modules• Vergleichbar mit Subversion- Externals• Geklontes Submodule verhält sich wie ein eigenes Git Repository• DRY (Komponenten, Plugins etc.)
    • Submodul hinzufügen$ git submodule add https://github.com/jeresig/jquery.hotkeys.gitpublic/js/vendor/jquery.hotkeys.gitCloning into public/js/vendor/jquery.hotkeys.git...remote: Counting objects: 171, done.remote: Compressing objects: 100% (79/79), done.remote: Total 171 (delta 104), reused 155 (delta 91)Receiving objects: 100% (171/171), 170.27 KiB | 204 KiB/s, done.Resolving deltas: 100% (104/104), done.
    • Hooks• Beispielscripte werden automatisch in .git/hooks erstellt• Client-Side Post-/Pre-Commit• Server-Side Post-/Pre-Push
    • Hook-Beispiele• E-Mail-Notification bei Push• IRC / Jabber-Nachrichten bei Push• PHPUnit Tests automatisch ausführen beim Commit• PHPLint Syntax-Check beim Commit
    • git-svn• Subversion Repository mit git nutzen• Geschwindigkeit von git für SVN repositories• Merging, Branching wie man es aus git gewohnt ist
    • Branching-Strategie
    • http://nvie.com/posts/a-successful-git-branching-model/
    • Ressourcen
    • Free Book: http://progit.org
    • Internet-Hilfe• Git-Homepage http://git-scm.com• Git-Kurs http://git.or.cz/course/• Every day git http://mgorski.net/2011/dev/everyday-git• Git Ready http://gitready.com/
    • Tools & SaaS
    • git gui / gitk
    • Travis - CI
    • Fragen?• E-Mail: marcel.eichner@foobugs.com• Twitter: @ephigenia