Git : Awesome Distributed Version Control SystemGit : Awesome Distributed Version Control System
Presenter : Raza.Z.Sayed
2
History
● Linux kernel project
● Patch emailing system
● Bitkeeper from 2002 to 2005.
● Why the name Git ?
- “I’m an egotistical bastard, and I name all my
projects after myself.First Linux, now git.” – Linus
Torvalds
● First commit message : 'initial version of “git”,the
information manager from hell'-Linus 4/7/05
3
Basic Concepts
●
Git is not like SVN (Subversion) and is fundamentally different . Git tracks
content not changes or deltas
●
Its like a filesystem. Its a collection of tools that implement tree history storage
and directory content management system.
● Non linear development, distributed development and efficient
- Ruby on Rails Git repository is around 13 Mb and Subversion repository of
the same is around 115 Mb !
● Not a binary but a toolkit design in spirit of unix philosophy (Write programs
that do one thing and do it well)
4
Basic Concepts
●
Git Object Database → .git directory
●
Git Object Types → stored in .git/objects
1. Blob
2. Tree
3. Commit
4. Tag
●
Git Data Model
1. Git Object Types
2. References (Branches and Remotes) → stored in .git/refs
5
Basic Git Workflow
● mkdir my_awesome_project
● cd my_awesome_project
● git init
● Create a file e.g. README.txt
● git status (Optional)
● git add README.txt (Add to staging)
● git commit -m “first commit”
6
Basic Git Workflow
● Make some changes to README.txt
● Create a new file e.g. hello.rb
● git status
● git add hello.rb README.txt or git add . or git add --all
● git commit -m “another commit”
● Make changes to hello.rb
● git commit -a -m “added foo method” (Wont add
untracked files to staging. git add them separately)
7
Different ways to add
● git add <list of files> (Add the list of files)
● git add --all (Add all files from the project.)
● git add . (Add all files from the project)
● git add *.txt (Add all txt files in current dir)
● git add “*.txt” (Add all txt files from the project)
● git add docs/*.txt (Add all txt files from docs dir)
● git add docs/ (Add all files from docs dir)
8
Viewing changes
● git diff (Show unstaged changes since last
commit)
● git diff --staged (show staged changes since
last commit)
● git log (show project history)
9
Undo unstaged changes
● git checkout . (Blow away all changes since
last commit)
● git checkout <list of files> (Blow away changes
to specified files since last commit)
10
Unstage changes
● git reset HEAD (Unstage all staged files)
● git reset HEAD <list of files> (Unstage
particular files) e.g. git reset HEAD
README.txt or git reset HEAD README.txt
hello.rb
11
Undo commits
● git reset soft HEAD^ (Undo last commit and move changes
back to staging) or git reset soft HEAD~1
● git reset soft HEAD^^ (Undo last two commits and move
changes back to staging) or git reset soft HEAD~2
● git reset hard HEAD^ (Undo last commit and blow away all
changes) or git reset hard HEAD~1
● git reset hard HEAD^^^ (Undo last three commits and blow
away all changes) or git reset hard HEAD~3
● git commit --amend -m “New commit message” (Change
the last commit message)
12
Sharing and Collaborating
● Lots of different code hosting services to
choose from e.g. Unfuddle, Github, Bitbucket
etc. or setup your own server.
● Create a git repo on the server. This is called a
remote repository.
● Inside your project dir on your local machine :
git remote add <some arbit name for the
remote repo> <path of remote repo>
13
Sharing and Collaborating
● git remote -v (show remote repositories
associated with the project)
● git push -u <remote repo name> <branch
name> e.g. git push -u origin master
● git pull (Pull changes from the remote repo)
● git remote rm <remote repo name> (Delete a
remote repo from the project)
14
Sharing and Collaborating
● Types of git repo urls : https://.. (Read only or read
write depending upon permissions) , git://.. (Git read
only), git@.. (SSH read write)
● git clone <remote repo url> or git clone <remote repo
url> [local name]
● git clone does the following three things. 1) Downloads
the entire repo into a new directory 2) Adds origin
remote pointing it to clone url 3) checks out the master
branch i.e. sets local repo HEAD to point to the master
branch
15
Branching
● Need to work on a new feature or fix a bug that
will take time ?. Create a new branch to work on
it.
● git branch <branch name> (Creates the branch)
● git checkout <branch name> (Switch to the
branch)
● git checkout -b <branch name> (Shortcut to
create and switch to a branch in one step)
16
Basic Branching Workflow
● git checkout -b cool_feature
● echo “This is readme for the cool feature” >
README.txt
● git add README.txt
● git commit -m “first commit in cool_feature branch”
● git checkout master
● git merge cool_feature
● git branch -d cool_feature (Delete the branch as were
done with it)
17
Types of Branch Merge
● Fast Forward Merge
● Non Fast Forward Merge (Recursive Merge)
● Recursive Merge creates an extra commit
automatically called a “Merge commit”
18
Conflicts
● Can either arise during git push or while doing a
merge (merge conflict)
● git push conflict scenario. Do a git pull first to fix
● Two cases in which merge conflicts can arise. 1)
During merging a local branch 2) Doing a git pull
● git pull = git fetch+git merge. What is origin/master ?
● Resolving merge conflicts
19
Sharing local branches
●
A wants to create a new branch and share it.
git checkout -b awesome_new_feature
git push origin awesome_new_feature
●
B wants to collaborate on the new branch.
git pull
git checkout awesome_new_feature
●
Listing remote branches : git branch -r
●
Getting detailed information about remote branches : git remote show origin
●
Deleting remote branches.
git push origin :awesome_new_feature
git branch -d awesome_new_feature. If this does not work then,
git branch -D awesome_new_feature
●
Cleaning up local references to deleted remote branches : git remote prune origin
20
Tagging
● What are tags ?
● Listing all tags : git tag
● Creating a new tag : git tag -a v1.0 -m “version
1.0”
● Checkout code at a particular commit : git
checkout v1.0
● Sharing tags : git push --tags
21
Rebase
● What is a rebase and why its better than a merge ?
● Dont do git pull ! . Instead do a fetch + rebase.
● Remote branch rebase workflow
git fetch
git rebase
● Local branch rebase workflow. e.g. To rebase branch new_feature into master
git checkout new_feature
git rebase master
git checkout master
git merge new_feature
22
Ignoring Files
● Only for yourself
Put exclude patterns in .git/info/exclude file
● For everyone
Put exclude patterns in .gitignore file in the
project root directory
● Untracking files
git rm --cached <file name>
23
References
● Git Community Book - http://git-scm.com/book
● Git Branching -
http://pcottle.github.com/learnGitBranching/
● Git for computer scientists -
http://eagain.net/articles/git-for-computer-scientists/
● Visual Git Reference -
http://marklodato.github.com/visual-git-guide/index-
24
Thank You

Git tech talk

  • 1.
    Git : AwesomeDistributed Version Control SystemGit : Awesome Distributed Version Control System Presenter : Raza.Z.Sayed
  • 2.
    2 History ● Linux kernelproject ● Patch emailing system ● Bitkeeper from 2002 to 2005. ● Why the name Git ? - “I’m an egotistical bastard, and I name all my projects after myself.First Linux, now git.” – Linus Torvalds ● First commit message : 'initial version of “git”,the information manager from hell'-Linus 4/7/05
  • 3.
    3 Basic Concepts ● Git isnot like SVN (Subversion) and is fundamentally different . Git tracks content not changes or deltas ● Its like a filesystem. Its a collection of tools that implement tree history storage and directory content management system. ● Non linear development, distributed development and efficient - Ruby on Rails Git repository is around 13 Mb and Subversion repository of the same is around 115 Mb ! ● Not a binary but a toolkit design in spirit of unix philosophy (Write programs that do one thing and do it well)
  • 4.
    4 Basic Concepts ● Git ObjectDatabase → .git directory ● Git Object Types → stored in .git/objects 1. Blob 2. Tree 3. Commit 4. Tag ● Git Data Model 1. Git Object Types 2. References (Branches and Remotes) → stored in .git/refs
  • 5.
    5 Basic Git Workflow ●mkdir my_awesome_project ● cd my_awesome_project ● git init ● Create a file e.g. README.txt ● git status (Optional) ● git add README.txt (Add to staging) ● git commit -m “first commit”
  • 6.
    6 Basic Git Workflow ●Make some changes to README.txt ● Create a new file e.g. hello.rb ● git status ● git add hello.rb README.txt or git add . or git add --all ● git commit -m “another commit” ● Make changes to hello.rb ● git commit -a -m “added foo method” (Wont add untracked files to staging. git add them separately)
  • 7.
    7 Different ways toadd ● git add <list of files> (Add the list of files) ● git add --all (Add all files from the project.) ● git add . (Add all files from the project) ● git add *.txt (Add all txt files in current dir) ● git add “*.txt” (Add all txt files from the project) ● git add docs/*.txt (Add all txt files from docs dir) ● git add docs/ (Add all files from docs dir)
  • 8.
    8 Viewing changes ● gitdiff (Show unstaged changes since last commit) ● git diff --staged (show staged changes since last commit) ● git log (show project history)
  • 9.
    9 Undo unstaged changes ●git checkout . (Blow away all changes since last commit) ● git checkout <list of files> (Blow away changes to specified files since last commit)
  • 10.
    10 Unstage changes ● gitreset HEAD (Unstage all staged files) ● git reset HEAD <list of files> (Unstage particular files) e.g. git reset HEAD README.txt or git reset HEAD README.txt hello.rb
  • 11.
    11 Undo commits ● gitreset soft HEAD^ (Undo last commit and move changes back to staging) or git reset soft HEAD~1 ● git reset soft HEAD^^ (Undo last two commits and move changes back to staging) or git reset soft HEAD~2 ● git reset hard HEAD^ (Undo last commit and blow away all changes) or git reset hard HEAD~1 ● git reset hard HEAD^^^ (Undo last three commits and blow away all changes) or git reset hard HEAD~3 ● git commit --amend -m “New commit message” (Change the last commit message)
  • 12.
    12 Sharing and Collaborating ●Lots of different code hosting services to choose from e.g. Unfuddle, Github, Bitbucket etc. or setup your own server. ● Create a git repo on the server. This is called a remote repository. ● Inside your project dir on your local machine : git remote add <some arbit name for the remote repo> <path of remote repo>
  • 13.
    13 Sharing and Collaborating ●git remote -v (show remote repositories associated with the project) ● git push -u <remote repo name> <branch name> e.g. git push -u origin master ● git pull (Pull changes from the remote repo) ● git remote rm <remote repo name> (Delete a remote repo from the project)
  • 14.
    14 Sharing and Collaborating ●Types of git repo urls : https://.. (Read only or read write depending upon permissions) , git://.. (Git read only), git@.. (SSH read write) ● git clone <remote repo url> or git clone <remote repo url> [local name] ● git clone does the following three things. 1) Downloads the entire repo into a new directory 2) Adds origin remote pointing it to clone url 3) checks out the master branch i.e. sets local repo HEAD to point to the master branch
  • 15.
    15 Branching ● Need towork on a new feature or fix a bug that will take time ?. Create a new branch to work on it. ● git branch <branch name> (Creates the branch) ● git checkout <branch name> (Switch to the branch) ● git checkout -b <branch name> (Shortcut to create and switch to a branch in one step)
  • 16.
    16 Basic Branching Workflow ●git checkout -b cool_feature ● echo “This is readme for the cool feature” > README.txt ● git add README.txt ● git commit -m “first commit in cool_feature branch” ● git checkout master ● git merge cool_feature ● git branch -d cool_feature (Delete the branch as were done with it)
  • 17.
    17 Types of BranchMerge ● Fast Forward Merge ● Non Fast Forward Merge (Recursive Merge) ● Recursive Merge creates an extra commit automatically called a “Merge commit”
  • 18.
    18 Conflicts ● Can eitherarise during git push or while doing a merge (merge conflict) ● git push conflict scenario. Do a git pull first to fix ● Two cases in which merge conflicts can arise. 1) During merging a local branch 2) Doing a git pull ● git pull = git fetch+git merge. What is origin/master ? ● Resolving merge conflicts
  • 19.
    19 Sharing local branches ● Awants to create a new branch and share it. git checkout -b awesome_new_feature git push origin awesome_new_feature ● B wants to collaborate on the new branch. git pull git checkout awesome_new_feature ● Listing remote branches : git branch -r ● Getting detailed information about remote branches : git remote show origin ● Deleting remote branches. git push origin :awesome_new_feature git branch -d awesome_new_feature. If this does not work then, git branch -D awesome_new_feature ● Cleaning up local references to deleted remote branches : git remote prune origin
  • 20.
    20 Tagging ● What aretags ? ● Listing all tags : git tag ● Creating a new tag : git tag -a v1.0 -m “version 1.0” ● Checkout code at a particular commit : git checkout v1.0 ● Sharing tags : git push --tags
  • 21.
    21 Rebase ● What isa rebase and why its better than a merge ? ● Dont do git pull ! . Instead do a fetch + rebase. ● Remote branch rebase workflow git fetch git rebase ● Local branch rebase workflow. e.g. To rebase branch new_feature into master git checkout new_feature git rebase master git checkout master git merge new_feature
  • 22.
    22 Ignoring Files ● Onlyfor yourself Put exclude patterns in .git/info/exclude file ● For everyone Put exclude patterns in .gitignore file in the project root directory ● Untracking files git rm --cached <file name>
  • 23.
    23 References ● Git CommunityBook - http://git-scm.com/book ● Git Branching - http://pcottle.github.com/learnGitBranching/ ● Git for computer scientists - http://eagain.net/articles/git-for-computer-scientists/ ● Visual Git Reference - http://marklodato.github.com/visual-git-guide/index-
  • 24.