Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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 Torwvaldsur...
Wieso git?•   Klein und schnell!•   Schnelles Branching & Merging•   Verteilte Repositories (indirekter Backup)•   Freie, ...
Geschwindigkeit•   (fast) Alle Operationen    lokal•   .git Verzeichnis nur auf    root Ebene•   http://git-scm.com/    ab...
Eigenschaften
Dezentralität•   Klon des kompletten Repositories lokal•   ermöglicht andere Workflows•   lokales branchen, commiten, reve...
Hashes statt Nummern•   dezentrale Architektur erlaubt keine    fortlaufende Revions-Nummerierung•   Inhalte zählen mehr a...
Nicht-lineare EntwicklungRechner 1                            A         B                                             Bran...
Vier Ebenen        Remote Repository                              pushpullclone                Local Repository           ...
Praxis
KonfigurationEinstellung für Identifikation in git $ git config --global user.name "Marcel Eichner" $ git config --global ...
Repository erstellenLokales Repository erstellen $ mkdir myrepo $ cd myrepo $ git init Initialized empty Git repository in...
Arbeiten ...$ echo "Hello World" > index.html
git statusAnzeigen aller geänderten und gelöschten Dateien $ git status # On branch master # # Initial commit # # Changes ...
StagingEine oder mehrere bestimmte Dateien stagen $ git add index.html $ git add *.htmlAlle Änderungen stagen (inklusive g...
CommitÄnderungen in Stage mit einer Nachricht ins lokale Repo comitten $ command   git commit -m "My first commit" [master...
Shortcut: Stage & CommitAlle Änderungen stagen und sofort commiten $ git commit -a -m "My Message" [master 7626937] change...
Remote Repo klonengit remote repository in den Ordner "mydir" klonen $ git clone git@192.168.123.212:testing.git mydir Clo...
Commits hochschiebenAlle commits zum Remote pushen $ git push origin master # Counting objects: 5, done. # Writing objects...
BranchingBranch anlegen und auschecken $ git branch my-rad-feature $ git checkout my-rad-feature Switched to branch my-rad...
Branches listenAlle verfügbaren lokalen branches anzeigen $ git branch   master * my-rad-featureAlle verfügbaren branches ...
Branch -> Remote"my-rad-feature"-Branch ins Remote schieben $ git push origin my-rad-feature Counting objects: 6, done. De...
Änderungen holenAlle Änderungen vom Repository holen $ git pull remote: Counting objects: 7, done.   remote: Compressing o...
Branch MergingIn den Merge-Ziel-Branch wechseln und mergen # assume we are in branch "my-rad-feature" and everything commi...
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 o...
weitere nützliche    Befehle
LogLog des gesamten Repositories anzeigen $ git log commit edfec504eb864dc667f3f5b9d301617036d15f3a Author: Marcel Eichner...
Log ExtendedAnzeige des Baum-graphen im Log $ git log --graphFilter nach Zeit & Autor $ git log --before="2 weeks ago" --a...
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...
help$ git [command] --helpNAME       git-blame - Show what revision and author last modified each line of a fileSYNOPSIS  ...
ZwischenablageAlle Änderungen in die Zwischenablage des lokalen git Repositories schieben $ git stashÄnderungen wieder zur...
IgnorierenProjekt-Spezifische ignores $ cat .gitignore # specific files in all directories .DS_Store # wildcards *.tmp # i...
Sub-Modules• Vergleichbar mit Subversion-  Externals• Geklontes Submodule verhält sich  wie ein eigenes Git Repository• DR...
Submodul hinzufügen$ git submodule add https://github.com/jeresig/jquery.hotkeys.gitpublic/js/vendor/jquery.hotkeys.gitClo...
Hooks•   Beispielscripte werden automatisch in    .git/hooks erstellt•   Client-Side Post-/Pre-Commit•   Server-Side Post-...
Hook-Beispiele•   E-Mail-Notification bei Push•   IRC / Jabber-Nachrichten bei Push•   PHPUnit Tests automatisch ausführen...
git-svn•   Subversion Repository mit git nutzen•   Geschwindigkeit von git für SVN    repositories•   Merging, Branching w...
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://mg...
Tools & SaaS
git gui / gitk
Travis - CI
Fragen?•   E-Mail: marcel.eichner@foobugs.com•   Twitter: @ephigenia
git - eine praktische Einführung
Nächste SlideShare
Wird geladen in …5
×

git - eine praktische Einführung

14.875 Aufrufe

Veröffentlicht am

Eine praktische Einführung in git.

Veröffentlicht in: Technologie

git - eine praktische Einführung

  1. 1. Eine praktische Einführung
  2. 2. Marcel Eichner @ephigeniaSeit 2000 PHP- & Frontend- Entwickler Founder und CxO von foo(bugs)
  3. 3. 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.
  4. 4. 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/
  5. 5. Geschwindigkeit• (fast) Alle Operationen lokal• .git Verzeichnis nur auf root Ebene• http://git-scm.com/ about/small-and-fast
  6. 6. Eigenschaften
  7. 7. Dezentralität• Klon des kompletten Repositories lokal• ermöglicht andere Workflows• lokales branchen, commiten, reverten etc.
  8. 8. Hashes statt Nummern• dezentrale Architektur erlaubt keine fortlaufende Revions-Nummerierung• Inhalte zählen mehr als Struktur• Identifizierung einzelner Commits über Content-Hashes (SHA-1)
  9. 9. Nicht-lineare EntwicklungRechner 1 A B Branch Master Remote 1 2 3 Head remote/master (origin)Rechner 2 X Y
  10. 10. Vier Ebenen Remote Repository pushpullclone Local Repository commit Stage checkout add Working Directory
  11. 11. Praxis
  12. 12. 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
  13. 13. Repository erstellenLokales Repository erstellen $ mkdir myrepo $ cd myrepo $ git init Initialized empty Git repository in ../myrepo/.git
  14. 14. Arbeiten ...$ echo "Hello World" > index.html
  15. 15. 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
  16. 16. StagingEine oder mehrere bestimmte Dateien stagen $ git add index.html $ git add *.htmlAlle Änderungen stagen (inklusive gelöschter Dateien) $ git add --all
  17. 17. 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(-)
  18. 18. 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
  19. 19. 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.
  20. 20. 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]
  21. 21. 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"
  22. 22. 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
  23. 23. 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
  24. 24. Ä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(-)
  25. 25. 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
  26. 26. WiederherstellenGelöschte Datei wieder herstellen $ git checkout index.html
  27. 27. 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
  28. 28. weitere nützliche Befehle
  29. 29. 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
  30. 30. 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"
  31. 31. tagDen aktuellen branch und stand taggen $ git tag "release-2012-11-06_12-30-12"Alle Tags listen $ git tag
  32. 32. 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]
  33. 33. 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.
  34. 34. 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}
  35. 35. 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
  36. 36. Sub-Modules• Vergleichbar mit Subversion- Externals• Geklontes Submodule verhält sich wie ein eigenes Git Repository• DRY (Komponenten, Plugins etc.)
  37. 37. 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.
  38. 38. Hooks• Beispielscripte werden automatisch in .git/hooks erstellt• Client-Side Post-/Pre-Commit• Server-Side Post-/Pre-Push
  39. 39. Hook-Beispiele• E-Mail-Notification bei Push• IRC / Jabber-Nachrichten bei Push• PHPUnit Tests automatisch ausführen beim Commit• PHPLint Syntax-Check beim Commit
  40. 40. git-svn• Subversion Repository mit git nutzen• Geschwindigkeit von git für SVN repositories• Merging, Branching wie man es aus git gewohnt ist
  41. 41. Branching-Strategie
  42. 42. http://nvie.com/posts/a-successful-git-branching-model/
  43. 43. Ressourcen
  44. 44. Free Book: http://progit.org
  45. 45. 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/
  46. 46. Tools & SaaS
  47. 47. git gui / gitk
  48. 48. Travis - CI
  49. 49. Fragen?• E-Mail: marcel.eichner@foobugs.com• Twitter: @ephigenia

×