Your SlideShare is downloading. ×
Git.From thorns to the stars
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Git.From thorns to the stars

362

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
362
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Git. From the thorns to the stars. Сергей Моренец 25 апреля 2013 г.
  • 2. Agenda • Versioning and revision systems overview • Git under the microscope • Examples • Q & A
  • 3. Glossary • VCS • SCM • RCS
  • 4. Requirements • Storing content • Tracking changes to the content • Distributing the content and history with collaborators
  • 5. Lost in selection
  • 6. Magic pill
  • 7. SCCS • First VCS available on any Unix system • Developed in SNOBOL at Bell Labs in 1972 • Prepared for IBM Systems/370 computers running OS/360 • Its file format is used in BitKeeper and other VCS • Introduced repositories and locking mechanism
  • 8. CVS • Ancestor of the revision control systems • First released in 1986 by Dick Grune • Simple technology with small learning curve • Useful for sharing and backing up the files • Tortoise CVS is a de facto client for CVS on Windows • Introduces merging • Lifecycle ended in 2008
  • 9. Apache Subversion • Created in 2000 • Used to host Apache software products, also Mono, SourceForge, Google Code • Most adopted SCM • Atomic commits • Maintains versioning for directories, renames, and file metadata • Better support for branches and tagging
  • 10. Centralized VCS
  • 11. Distributed VCS
  • 12. Distributed workflow
  • 13. Git • Distributed revision control and source code management system • Designed and developed by Linus Torvalds for Linux kernel development • Based on BitKeeper system • The development began on April 2005 • Current version 1.8.2
  • 14. Linus Torvalds • Swedish-speaking Finnish American • Chief architect and the project's coordinator of the Linux kernel • Names after Linus Pauling and Linus Van Pelt • Second lieutenant of the Finnish Army • Winner of Millennium Technology Prize in 2012 • Calls himself egotistical bastard
  • 15. Git The information manager from hell
  • 16. Git Global information TRACKER
  • 17. Junio Hamano • Graduated from Tokyo university • Git coordinator since 2005 • Participated in the Linux development • Currently Google developer
  • 18. Design Principles • Take CVS as an example of what not to do • Support distributed workflow • Scaling to thousand developers • Strong consistency and integrity support • Free
  • 19. Features • Rapid branches and merging • Distributed development • Compatibility and emulation • Performance breakthrough • Revisions hashing • Garbage collector • Packed data storage
  • 20. Git Repository • Database containing revisions and history of the project • Retains complete copy of entire project • Maintains object store and index • Object store contains data files, log files and audit information
  • 21. Git Repository
  • 22. Git Object Types • Blobs • Trees • Commits • Tags
  • 23. Blobs • Each version of a file is represented as a blob. • Blob internal structure is ignored by Git. • A blob holds a file’s data but does not contain any metadata about the file or even its name. • git show command examines contents of the blob
  • 24. Trees • A tree object represents one level of directory information. • It records blob identifiers and path names for all the files in one directory. • It can also recursively reference other sub-trees objects • Can be examined by git show or git ls-tree commands
  • 25. Commits • A commit object holds metadata for each change including the author, commit date, and log message. • Each commit points to a tree object that captures, the state of the repository at the time the commit was performed. • git tag stable-1 1b2e1d63ff
  • 26. Tags • A tag object assigns an arbitrary yet presumably human readable name to a specific object, usually a commit. • Contains tag type, tag message, author and object name. • Can be examined by git cat-file command.
  • 27. Git Repository
  • 28. Git Object Model • Object store is organized and implemented as a content-addressable storage system. • Each object has a unique name produced by applying SHA1 to the contents of the object. • SHA1 hash is a sufficient index or name for that object in the object database. • SHA1 values are 160-bit values that are represented as a 40-digit hexadecimal number • 9da581d910c9c4ac93557ca4859e767f5caf5169
  • 29. Advantages • Git can determine equality of the objects by comparing names. • The same content stored in two repositories will always be stored under the same name. • Corruptions errors can be detected by checking that the object's name is still the SHA1 hash of its contents.
  • 30. Name Vs Content • Git stores each version of file not differences • Path name is separated from file contents • Object store is based on hashed computation on file contents, not name System Index mechanism Data store Database Indexed Sequential Access Method Data records Unix FS Directories(/path) Blocks of data Git .git/objects/hash Blob/tree objects
  • 31. Git Directory • Stores all Git's history, configuration and meta information for your project • There is only one git directory per project • By default it’s '.git' in the root of your project
  • 32. Git Directory • Configuration: - config - description - info/exclude • Helps configuring local repository
  • 33. Git Directory • Hooks: -hooks • Scripts that are run on certain lifecycle events of the repository
  • 34. Git Directory • Object Database: -objects • Default Git object database • Contains all content or pointers to local content. • All objects are immutable
  • 35. Git Directory • References: -refs • Stores reference pointers for branches, tags and heads. • A reference is a pointer to an object, usually of type tag or commit. • References changes as the repository evolves
  • 36. Working Directory • Holds the current checkout of the files • Files can be removed or replaced by Git as branches are switching • Working directory is temporary checkout place
  • 37. Index • The index is a temporary and dynamic binary file that captures a version of the project’s overall structure • The project’s state could be represented by a commit and a tree from any point in the project’s history • The index allows a separation between incremental development steps and the committal of those changes.
  • 38. Index • Staging area between your working directory and your repository • With commit data files from index are committed, not from working directory • Can be viewed by git status command.
  • 39. Data flow
  • 40. Git Usage • Command-line tool(Git Bash) • Git GUI • IDE Plugin(JGit-based)
  • 41. Git Bash • Command-line tool • UNIX-style utility • Last straw
  • 42. Git GUI • MinGW – based • Former WinGit • No support
  • 43. JGit • Lightweight, pure Java library implementing the Git • EGit - Eclipse team provider for Git • NBGit - Git Support for NetBeans
  • 44. Git Commands • init • checkout • fetch • pull • reset • merge • log
  • 45. Git Commands • add • commit • push • branch • tag
  • 46. First steps • Clone repository • Initialize repository
  • 47. Clone Repository • git clone git://git.kernel.org/pub/scm/git/git.git • git clone http://www.kernel.org/pub/scm/git/git.git
  • 48. Branching • Branch is graph of commits • Master branch is created by default • HEAD is pointer to the current branch • “git branch test” creates branch test. • “git checkout master” switches to branch master. • “git merge test” merges changes from test to master. • Merges are done automatically.
  • 49. Conflicts • If conflict cannot be resolved index and working tree are left in the special state • “git status” shows unmerged files with conflict markers • git add file.txt • git commit
  • 50. Roll Back • Reset • Checkout • Revert
  • 51. Reset • git reset --hard HEAD • git reset --hard ORIG_HEAD
  • 52. Checkout • git checkout HEAD MyClass.java
  • 53. Revert • Rollbacks the last commit(s) in the repository • git revert HEAD • git revert HEAD~1 –m 2
  • 54. Git References • All references are named with a slash-separated path name starting with "refs“. • -The branch "test" is short for "refs/heads/test". • The tag "v1.0" is short for "refs/tags/v1.0". • "origin/master" is short for “refs/remotes/origin/master"
  • 55. Git References • The HEAD file is a symbolic reference to the branch we are currently using • git symbolic-ref HEAD • ref: refs/heads/master
  • 56. Advanced Git
  • 57. Branching strategy • master • develop
  • 58. Branching strategy • origin/master contains production-ready code • origin/develop contains development changes
  • 59. Branching strategy • Feature branches • Release branches • Hotfix branches
  • 60. Feature Branches • Feature branches (or topic branches) are used to store new features • Can be added to develop or disregarded • git checkout –b newfeature develop
  • 61. Release Branches • Release branches support preparation of a new production release
  • 62. Hotfix branches • Hotfix branches are related to new production release. • Created in response to critical bugs in a production environment. • Separates developing of the current version and hotfix.
  • 63. Branching strategy
  • 64. Rebasing • git checkout -b mywork origin • git commit • git commit
  • 65. Rebasing
  • 66. Rebasing • git merge origin
  • 67. Rebasing • git checkout mywork • git rebase origin
  • 68. Rebasing
  • 69. Stashing • git stash save “Stashing reason“ • … • git stash apply
  • 70. Treeishes • 980e3ccdaac54a0d4de358f3fe5d718027d96aae • 980e3ccdaac54a0d4 • 980e3cc
  • 71. Treeishes • 980e3ccdaac54a0d4de358f3fe5d718027d96aae • origin/master • refs/remotes/origin/master • master • refs/heads/master • v1.0 • refs/tags/v1.0
  • 72. Issues search • git bisect start • git bisect good v1.0 • git bisect bad master • git bisect bad • git show • git bisect reset
  • 73. Blamestorming • git blame sha1_file.c • 0fcfd160 (Linus Torvalds 2005-04-18 8) */ • 0fcfd160 (Linus Torvalds 2005-04-18 9) #include "cache.h" • 1f688557 (Junio C Hamano 2005-06-27 10) #include "delta.h" • a733cb60 (Linus Torvalds 2005-06-28 11) #include "pack.h"
  • 74. Git Hooks • Scripts placed in $GIT_DIR/hooks directory to trigger action at certain points • pre-commit • commit-msg • post-commit • post-checkout • post-merge
  • 75. Object Store • All objects are stored as compressed contents by their SHA-1 values. • They contain the object type, size and contents in a gzipped format. • Loose objects and packed objects.
  • 76. Loose Objects • Compressed data stored in a single file on disk • Every object written to a separate file • SHA1 ab04d884140f7b0cf8bbf86d6883869f16a46f65 • GIT_DIR/objects/ab/04d884140f7b0cf8bbf86d68838 69f16a46f65
  • 77. Packed Objects • Packfile is a format which stores the part that has changed in the second file • Uses heuristic algorithm to define files to pack • git gc packs the data • git unpack-objects converts data into loose format
  • 78. Ignoring files • # Ignore any file named sample.txt. • sample.txt • # Ignore Eclipse files • *.project • # except my.project with manual setting. • !my.project • # Ignore objects and archives. • *.[oa]
  • 79. Scripting • Ruby • PHP • Python • Perl
  • 80. Migration • Script support • CVS • SVN • Perforce • Mercurial • fast-support tool
  • 81. Migration • git-svn clone http://my- project.googlecode.com/svn/trunk new-project • ~/git.git/contrib/fast-import/git-p4 clone //depot/project/main@all myproject
  • 82. GitHub
  • 83. GitHub • Web-based hosting service • Was launched in April 2008 • Git repository, paid for private projects and free for open-source projects • Run by Ruby on Rails & Erlang • Provides feeds and followers
  • 84. Growth Period State 2009 100000 users and 50000 repositories 2011 1 million users 2012 2 million users and 4 million repositories 2013 3 million users and 5 million repositories
  • 85. Octocat • Introduced by Tom Preston-Werner, cofounder of GitHub • Composed of octopus and cat words
  • 86. Octocat
  • 87. Resources • Version Control with Git, 2nd Edition, 2012 • Pro Git, 2009
  • 88. Pros • Painless branching • Separation between local repository and upstream • Simplifies work in the distributed teams • Dramatic increase in performance • Integration with major VCS
  • 89. Cons • Repository security risks • Latest revision question • Pessimistic locks • Big learning curve • Commit identifiers • Not optimal for single developers
  • 90. Q&A • Сергей Моренец, morenets@mail.ru

×