91
Git. From the thorns to the stars. Сергей Моренец 25 апреля 2013 г.

Git.From thorns to the stars

Embed Size (px)

Citation preview

Page 1: Git.From thorns to the stars

Git.From the thorns to the stars.

Сергей Моренец25 апреля 2013 г.

Page 2: Git.From thorns to the stars

Agenda

• Versioning and revision systems overview• Git under the microscope• Examples• Q & A

Page 3: Git.From thorns to the stars

Glossary• VCS• SCM• RCS

Page 4: Git.From thorns to the stars

Requirements• Storing content• Tracking changes to the content• Distributing the content and history with

collaborators

Page 5: Git.From thorns to the stars

Lost in selection

Page 6: Git.From thorns to the stars

Magic pill

Page 7: Git.From thorns to the stars

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

Page 8: Git.From thorns to the stars

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

Page 9: Git.From thorns to the stars

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

Page 10: Git.From thorns to the stars

Centralized VCS

Page 11: Git.From thorns to the stars

Distributed VCS

Page 12: Git.From thorns to the stars

Distributed workflow

Page 13: Git.From thorns to the stars
Page 14: Git.From thorns to the stars

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

Page 15: Git.From thorns to the stars

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

Page 16: Git.From thorns to the stars

GitThe information manager from

hell

Page 17: Git.From thorns to the stars

GitGlobal information

TRACKER

Page 18: Git.From thorns to the stars

Junio Hamano• Graduated from Tokyo university• Git coordinator since 2005• Participated in the Linux development• Currently Google developer

Page 19: Git.From thorns to the stars

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

Page 20: Git.From thorns to the stars

Features• Rapid branches and merging• Distributed development• Compatibility and emulation• Performance breakthrough• Revisions hashing• Garbage collector• Packed data storage

Page 21: Git.From thorns to the stars

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

Page 22: Git.From thorns to the stars

Git Repository

Page 23: Git.From thorns to the stars

Git Object Types• Blobs• Trees• Commits• Tags

Page 24: Git.From thorns to the stars

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

Page 25: Git.From thorns to the stars

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

Page 26: Git.From thorns to the stars

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

Page 27: Git.From thorns to the stars

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.

Page 28: Git.From thorns to the stars

Git Repository

Page 29: Git.From thorns to the stars

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

Page 30: Git.From thorns to the stars

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.

Page 31: Git.From thorns to the stars

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

Page 32: Git.From thorns to the stars

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

Page 33: Git.From thorns to the stars

Git Directory• Configuration:- config- description- info/exclude

• Helps configuring local repository

Page 34: Git.From thorns to the stars

Git Directory• Hooks:-hooks

• Scripts that are run on certain lifecycle events of the repository

Page 35: Git.From thorns to the stars

Git Directory• Object Database:-objects

• Default Git object database• Contains all content or pointers to local content. • All objects are immutable

Page 36: Git.From thorns to the stars

Git Directory• References:-refs

• Stores reference pointers for branches, tags and heads. • A reference is a pointer toan object, usually of type tag or commit. • References changes as the repository evolves

Page 37: Git.From thorns to the stars

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

Page 38: Git.From thorns to the stars

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.

Page 39: Git.From thorns to the stars

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.

Page 40: Git.From thorns to the stars

Data flow

Page 41: Git.From thorns to the stars

Git Usage• Command-line tool(Git Bash)• Git GUI• IDE Plugin(JGit-based)

Page 42: Git.From thorns to the stars

Git Bash• Command-line tool• UNIX-style utility• Last straw

Page 43: Git.From thorns to the stars

Git GUI• MinGW – based• Former WinGit• No support

Page 44: Git.From thorns to the stars

JGit• Lightweight, pure Java library implementing the

Git• EGit - Eclipse team provider for Git• NBGit - Git Support for NetBeans

Page 45: Git.From thorns to the stars

Git Commands• init• checkout• fetch• pull• reset• merge• log

Page 46: Git.From thorns to the stars

Git Commands• add• commit• push• branch• tag

Page 47: Git.From thorns to the stars

First steps• Clone repository• Initialize repository

Page 48: Git.From thorns to the stars

Clone Repository• git clone git://git.kernel.org/pub/scm/git/git.git• git clone http://www.kernel.org/pub/scm/git/git.git

Page 49: Git.From thorns to the stars

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.

Page 50: Git.From thorns to the stars

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

Page 51: Git.From thorns to the stars

Roll Back• Reset• Checkout• Revert

Page 52: Git.From thorns to the stars

Reset• git reset --hard HEAD• git reset --hard ORIG_HEAD

Page 53: Git.From thorns to the stars

Checkout• git checkout HEAD MyClass.java

Page 54: Git.From thorns to the stars

Revert• Rollbacks the last commit(s) in the repository• git revert HEAD• git revert HEAD~1 –m 2

Page 55: Git.From thorns to the stars

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"

Page 56: Git.From thorns to the stars

Git References• The HEAD file is a symbolic reference to the

branch we are currently using• git symbolic-ref HEAD

• ref: refs/heads/master

Page 57: Git.From thorns to the stars

Advanced Git

Page 58: Git.From thorns to the stars

Branching strategy• master• develop

Page 59: Git.From thorns to the stars

Branching strategy• origin/master contains production-ready code• origin/develop containsdevelopment changes

Page 60: Git.From thorns to the stars

Branching strategy• Feature branches• Release branches• Hotfix branches

Page 61: Git.From thorns to the stars

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

Page 62: Git.From thorns to the stars

Release Branches• Release branches support preparation of a new

production release

Page 63: Git.From thorns to the stars

Hotfix branches• Hotfix branches are related to new production

release.• Created in response to critical bugs in a

production environment.• Separates developing of thecurrent version and hotfix.

Page 64: Git.From thorns to the stars

Branching strategy

Page 65: Git.From thorns to the stars

Rebasing• git checkout -b mywork origin• git commit• git commit

Page 66: Git.From thorns to the stars

Rebasing

Page 67: Git.From thorns to the stars

Rebasing• git merge origin

Page 68: Git.From thorns to the stars

Rebasing• git checkout mywork • git rebase origin

Page 69: Git.From thorns to the stars

Rebasing

Page 70: Git.From thorns to the stars

Stashing• git stash save “Stashing reason“• …• git stash apply

Page 71: Git.From thorns to the stars

Treeishes• 980e3ccdaac54a0d4de358f3fe5d718027d96aae • 980e3ccdaac54a0d4• 980e3cc

Page 72: Git.From thorns to the stars

Treeishes• 980e3ccdaac54a0d4de358f3fe5d718027d96aae • origin/master• refs/remotes/origin/master • master• refs/heads/master• v1.0 • refs/tags/v1.0

Page 73: Git.From thorns to the stars

Issues search• git bisect start • git bisect good v1.0• git bisect bad master

• git bisect bad

• git show

• git bisect reset

Page 74: Git.From thorns to the stars

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"

Page 75: Git.From thorns to the stars

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

Page 76: Git.From thorns to the stars

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.

Page 77: Git.From thorns to the stars

Loose Objects• Compressed data stored in a single file on disk• Every object written to a separate file

• SHA1 ab04d884140f7b0cf8bbf86d6883869f16a46f65

• GIT_DIR/objects/ab/04d884140f7b0cf8bbf86d6883869f16a46f65

Page 78: Git.From thorns to the stars

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

Page 79: Git.From thorns to the stars

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]

Page 80: Git.From thorns to the stars

Scripting• Ruby• PHP• Python• Perl

Page 81: Git.From thorns to the stars

Migration• Script support• CVS• SVN• Perforce• Mercurial

• fast-support tool

Page 82: Git.From thorns to the stars

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

Page 83: Git.From thorns to the stars

GitHub

Page 84: Git.From thorns to the stars

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

Page 85: Git.From thorns to the stars

GrowthPeriod State2009 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

Page 86: Git.From thorns to the stars

Octocat• Introduced by Tom Preston-Werner, cofounder of

GitHub• Composed of octopus and cat words

Page 87: Git.From thorns to the stars

Octocat

Page 88: Git.From thorns to the stars

Resources• Version Control with Git, 2nd Edition, 2012• Pro Git, 2009

Page 89: Git.From thorns to the stars

Pros• Painless branching• Separation between local repository and

upstream• Simplifies work in the distributed teams• Dramatic increase in performance• Integration with major VCS

Page 90: Git.From thorns to the stars

Cons• Repository security risks• Latest revision question• Pessimistic locks• Big learning curve• Commit identifiers• Not optimal for single developers

Page 91: Git.From thorns to the stars

Q&A

• Сергей Моренец, [email protected]