Git Verstehen Und Nutzen

Git Verstehen Und Nutzen

Git verstehen und nutzen Stephan Beyer 11. Chemnitzer Linux-Tage 14. M¨arz 2009 (π-Tag) Git 1 / 79 Teil I Einleitung Git 2 / 79 Was ist Git? . ein Versionsverwaltungssystem, oder Software Configuration Management\ (Software-Engineering, " Rational ClearCase, BitKeeper) Source Code Management\ (Darcs) " Source Control Management\ (Wikipedia) " Revision Control System\ (RCS, GNU arch) " Source Code Control System\ (SCCS) " Version Control System\ (CVS, Subversion, Mercurial, " GNU Bazaar, Monotone) Global Information Tracker\ (Linus Torvalds) " Git VCS 3 / 79 Was ist Git? Versionsverwaltung { wozu? Problem Daten ¨andern sich im Laufe der Zeit. Diese Anderungen¨ sollen festgehalten werden. Hilfreich: Wer hat wann was warum ge¨andert? Daten in Programmcode Dateien bspw. Dokumentation Projekten Konfigurationsdateien abstrakt: Objekten Bin¨ardateien Git VCS 4 / 79 Was ist Git? Versionsverwaltung { wozu? F¨ahigkeiten Versionsverwaltung nach Eric S. Raymond Verwaltung von Daten mit Umkehrbarkeit { Zuruckholen¨ bekannter, gespeicherter Zust¨ande, z. B. bei Fehlern oder schlechten Ideen Nebenl¨aufigkeit {F¨ahigkeit, dass viele Personen auch gleichzeitig denselben Code ¨andern durfen,¨ ohne dass Anderungen¨ einer Person einfach verloren gehen Kommentierung { Anderungen¨ k¨onnen kommentiert werden mit Intention, Grunden,¨ Umsetzung, Hinweisen, . Git VCS 5 / 79 Einschub: zwei grobe Begriffe Projekt: Gesamtheit aller Daten (jetzt: Verzeichnisse mit Dateien), die verwaltet werden sollen Repository: dt. Lager, Depot, Repositorium; kurz Repo; ein von einer Versionsverwaltung verwaltetes Projekt Git VCS 6 / 79 Was ist Git? . ein verteiltes oder dezentrales Versionsverwaltungssystem (DVCS): Jeder Nutzer hat eigenes Repo eines Projektes mit der gesamten Geschichte. Jedes Repo kann einen Zustand haben, der sich von den anderen unterscheidet. Neben Git z¨ahlen auch Arch, Bazaar, BitKeeper, Darcs, Mercurial, Monotone zu den DVCS. Git verteilte VCS 7 / 79 Warum Git? einfach zu bedienen (wenn Konzepte verstanden) schnell mittlerweile große Nutzerbasis und Community schnelle Entwicklung viel Support (auch Blogosphere) Google: Results 1 - 20 of about 138,000,000 for git Sachzwang: ein Projekt nutzt Git flexibel und m¨achtig stellt sich nicht in den Weg des Anwenders viele nutzliche¨ Kleinigkeiten Linus schrieb's Git Grunde¨ 8 / 79 Zeitverhalten Daten- und Bildquelle: Why Git is Better Than X ! Git is fast Plot von Google Charts API Abbildung: verschiedene DVCS-Operationen auf Django-Repo (roh: ≈19M) Git Grunde¨ 9 / 79 Nutzerentwicklung Quelle: trends.google.com , 4.3.2009 Abbildung: Google Trends, Suchanfragen Git Grunde¨ 10 / 79 Nutzerentwicklung Quelle: qa.debian.org popcon statistics (inst), 4.3.2009 Abbildung: Debian Popularity Contest, Installationen von (D)VCS Git Grunde¨ 11 / 79 Nutzerentwicklung Quelle: qa.debian.org popcon statistics (vote), 4.3.2009 Abbildung: Debian Popularity Contest, regul¨are Nutzung von (D)VCS Git Grunde¨ 12 / 79 Wer nutzt Git? ALSA Git Rails Android GNU autoconf rox awesome GNU automake Rubinius bucardo GNU coreutils Samba buildd-tools GNU Libtool Slash Cairo GNU TLS swfdec centerim grml SWI-Prolog Cinelerra-CV HAL SysLinux cobbler LilyPond The Mana World Compiz Fusion Linux Thousand Parsec dash Merb uade DBus Mesa3D U-Boot DirectFB netconf VLC ELinks OLPC VLE Erlware OpenVZ Wexus Fedora OpenXPKI WINE fluxbox pacman XMMS2 fontconfig pbuilder X.org fprint Perl 5 xwax Frugalware Phoronix Test Suite yum gEDA Poppler ZeroInstall GHC Prototype ...diese Folien Git Grunde¨ 13 / 79 Teil II Grundlegende Konzepte Git 14 / 79 Konzepte Wichtig fur¨ Grundverst¨andnis: wichtige Objekte: Blobs, Trees, Commits, . Referenzen (Refs): Branches, (leichtgewichtige) Tags, . der Index Git 15 / 79 Objekte in Git Git als inhaltsadressiertes Dateisystem Idee: jedes Objekt hat eindeutigen Namen Name = SHA-1 des Objekts SHA-1 berechnet sich aus Inhalt des Objekts L¨ange 160 Bit (20 Bytes) ) Hexadezimalstring aus 40 Zeichen 2 f0;:::; 9; a;:::; f g Konsequenz: schneller Zugriff in Objektdatenbank nach Namen gleiche Objekte haben gleichen Namen Anderungen¨ am Objekt ¨andern dessen Namen schneller Vergleich von Objekten implizite Integrit¨atsprufung¨ maximal 25620 > 1048 Objekte Git Objekte 16 / 79 Blob-Objekt Daten bzw. Inhalt von Dateien Hello world 802992c4220de19a90767f3000a79a31b98d0df7 #!/bin/sh for i in "$@" do convert "$i" -scale 0.5 "small/$i" done 97d9fed61674aa80332e4d6596b875c66099044d e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 Git Objekte Blobs 17 / 79 Tree-Objekt gibt die Datei- und Verzeichnisstruktur wieder Gebilde aus Blobs und Trees mit Attributen wie Dateinamen und -rechten, Symlinks usw. Dateirechte: eingeschr¨ankt auf Unterscheidung ausfuhrbar¨ / nicht-ausfuhrbar¨ 802992c: 100644 hello e69de29: 100644 empty-file Verzeichnisstruktur: empty a6097b449283b490eb4147ffbf3f920ddbbfdf21 small.sh small/ e69de29: 100644 empty hello 97d9fed: 100755 small.sh empty-file a6097b4: 040000 small 4b15187b78c70255e53857fead9181bbcc22405d Git Objekte Trees 18 / 79 Commit-Objekt besteht aus Committer (Ersteller des Commits) Autor Zeit Parent(s), d. h. Eltern-Commit(s) ! Verweis auf Geschichte Tree-Objekt Zusammenfassung der Anderungen;¨ idealerweise: erste Zeile fasst Anderungen¨ kurz zusammen dann leere Zeile ausfuhrliche¨ Zusammenfassung ggf. spezielle Angaben wir Signed-off-by: am Ende d. h. ein Commit beschreibt, wer wann was warum ge¨andert hat. Git Objekte Commits 19 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Commit-History gerichteter, azyklischer Graph der Commit-Geschichte e0d8d74 d2cb604 fdd8901 b7f63a4 11a4fcf ab32698 52742ac 597429c bf4e171 76b35f0 d83040c d3fa0a1 8054e14 fea8f5c aaf43ff 5bacee0 5013c78 c447413 Git Objekte Commits 20 / 79 Referenzen SHA-1-IDs sind unhandlich, schwer zu merken und semantikarm Referenzen (Refs) sind selbst-definierbare Namen verweisen auf Commits oder auf andere Refs (! symbolische Refs) wichtige Standardreferenz: HEAD { verweist auf aktuellen Commit wichtige Arten\ von Refs: " Tags (! refs/tags/) Branches (! refs/heads/) Remotes (! refs/remotes/) ... heads/master 6ef9349 7af1ce5 heads/work d3fa0a1 remotes/doc/HEAD HEAD c3a4a13 e6df2e5 fea8f5c aaf43ff 5bacee0 tags/v1.0 5013c78 c447413 Git Referenzen 21 / 79 Referenzen SHA-1-IDs sind unhandlich, schwer zu merken und semantikarm Referenzen (Refs) sind selbst-definierbare Namen verweisen auf Commits oder auf andere Refs (! symbolische Refs) wichtige Standardreferenz: HEAD { verweist auf aktuellen Commit wichtige Arten\ von Refs: " Tags (! refs/tags/) Branches (! refs/heads/) Remotes (! refs/remotes/) ... heads/master 6ef9349 7af1ce5 heads/work d3fa0a1 remotes/doc/HEAD HEAD c3a4a13 e6df2e5 fea8f5c aaf43ff 5bacee0 tags/v1.0 5013c78 c447413 Git Referenzen 21 / 79 Einschub: Angabe von Commits { Revisionen Revision benennt ein Commit-Objekt Angabe als SHA-1 Eingabe eines eindeutigen Pr¨afixes genugt¨ mindestens 4 Zeichen oft: 7 Zeichen (beliebte Voreinstellung) Angabe als Ref { Suchreihenfolge: 1 name (HEAD, FETCH HEAD, ORIG HEAD, MERGE HEAD) 2 refs/name 3 refs/tags/name 4 refs/heads/name 5 refs/remotes/name 6 refs/remotes/name/HEAD Angabe uber¨ die Commit-Geschichte Git Einschub: Revisionen 22 / 79 Einschub: Angabe von Commits { Revisionen Revision benennt ein Commit-Objekt Angabe als SHA-1 Eingabe eines eindeutigen Pr¨afixes genugt¨ mindestens 4 Zeichen oft: 7 Zeichen (beliebte Voreinstellung) Angabe als Ref { Suchreihenfolge: 1 name (HEAD, FETCH HEAD, ORIG HEAD, MERGE HEAD) 2 refs/name 3 refs/tags/name 4 refs/heads/name 5 refs/remotes/name 6 refs/remotes/name/HEAD Angabe uber¨ die Commit-Geschichte Git Einschub: Revisionen 22 / 79 Einschub: Angabe von Commits { Revisionen Geschichtstraverse mit der Tilde (~) Sei x eine Revision. x~ bezeichnet den ersten Parent von x x~n bezeichnet den ersten Parent der n-ten Generation HEAD, HEAD~0 c1f7fd2 HEAD HEAD~, HEAD~1 7ce73d1 HEAD~~, HEAD~2 6ef9349 7af1ce5 HEAD~~~, HEAD~3 c3a4a13 e6df2e5 HEAD~~~~, HEAD~4 aaf43ff HEAD~~~~~, HEAD~5 5013c78 Git Einschub: Revisionen 23 / 79 Einschub: Angabe von Commits { Revisionen Geschichtstraverse mit der Tilde (~) Sei x eine Revision. x~ bezeichnet den ersten Parent von x x~n bezeichnet den ersten Parent der n-ten Generation

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    101 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us