Git basics
 

Git basics

on

  • 1,958 views

A git training I gave at my workplace an year back.

A git training I gave at my workplace an year back.

Statistics

Views

Total Views
1,958
Views on SlideShare
1,930
Embed Views
28

Actions

Likes
6
Downloads
50
Comments
0

3 Embeds 28

http://www.linkedin.com 20
https://www.linkedin.com 5
http://staging.slideshare.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Git basics Git basics Presentation Transcript

    • GitAn intro to Git Source Control Management
    • What is Git?Distributed version control systemLinus Torvalds - to track linux kernel developmentFree and open sourceDesigned to handle small/large projects with speed and efficiencyFast branching and merging
    • Why source control?Faster developmentArchive of all code changes over timeCompare changes and revert to old releaseAccountabilityConserve disk spaceGood for you
    • Distributed vs Centralized
    • The Basics
    • Installing git• To initialize git directory• $ git init• Start version controlling existing files• $ git add *.php *.inc *.html *.tpl• $ git commit -m ‘Initial project version’• Cloning an existing repository• $ git clone ssh://clickindia@192.168.0.77/home/clickindia/public_html/clickindia
    • Basic git workflow• You modify files in your working directory• You stage files adding snapshot of them to staging area• You do a commit which takes the files in staging area and stores the snapshot permanently
    • Changes in repositoryTo check status of your filesModifying filesTracking new filesRemoving filesStaging modified filesCommitting filesIgnoring files
    • Example of gitignore$ cat .gitignore *.[oa] *~ *.a # no .a files !lib.a # but do track lib.a, even though youre ignoring .a files above /TODO # only ignore the root TODO file, not subdir/TODO build/ # ignore all files in the build/ directory doc/*.txt # ignore doc/notes.txt, but not doc/server/arch.txt
    • Viewing staged and unstaged changesgit statusgit diff (Compares working directory with staging area)git diff --stagedgit diff HEADgit diff v1.0 v1.1git diff master adposting
    • Branching$ git add README test.rb LICENSE$ git commit -m initial commit of my project Created on commit Created on add
    • Branching
    • Branching
    • Creating new branch$ git branch testing
    • Current branch
    • Switching branch$ git checkout testing
    • Significance of branch$ vim test.php$ git commit -am “made a change”
    • Significance of branch$ git checkout master
    • Significance of branch$ vim test.php$ git commit -am “made a change”
    • Basic branching and merging• Create a new feature branch• Do some work in that branchCritical issue in production• Revert back to production branch• Create a new branch to add the hotfix• After testing, merge the hotfix branch and push to production• Switch back to your original issue and continue
    • Basic branching and merging$ git checkout -b iss53Switched to a new branch "iss53"
    • Basic branching and merging$ vi index.html$ git commit -a -m added a new footer [issue 53]
    • Basic branching and mergingIssue in production$ git checkout masterSwitched to branch “master”$ git checkout -b ‘hotfix’Switched to a new branch “hotfix”$ vim index.html$ git commit -am ‘fixed a broken email address’[hotfix]: created 3a0874c: "fixed the broken email address" 1 files changed, 0 insertions(+), 1 deletions(-)
    • Basic branching and merging$ git checkout master$ git merge --no-ff hotfixUpdating f42c576..3a0874c README | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) $ git branch -d hotfix Deleted branch hotfix (3a0874c).
    • Basic branching and merging$ git checkout iss53Switched to branch "iss53"$ vim index.html$ git commit -a -m finished the new footer [issue 53][iss53]: created ad82d7a: "finished the new footer [issue 53]" 1 files changed, 1 insertions(+), 0 deletions(-)
    • Basic branching and merging$ git checkout master$ git merge iss53Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
    • Basic branching and merging$ git branch -d iss53
    • Branch management$ git branch # Shows all the active branches$ git branch -v # Shows last commit on each branch$ git branch --merged # Shows which branches are merged with the branch you are on$ git branch --no-merged # Shows all branches that contain work you haven’t merged$ git branch -d testing # To delete a branch. Will fail if the branch is not yet merged
    • Remote branches• Remote branches are references to the state of branches on your remote repositories
    • Remote branches
    • Remote branches$ git fetch origin # Fetches any data you don’t have from remote ‘origin’ repository$ git fetch origin master # Fetches data only from ‘master’ branch$ git pull origin # Fetches any data you don’t have and merges it with local branch$ git pull origin master # Fetches data from master and merges it with local master branch$ git push origin develop # Pushes data from local ‘develop’ branch to remote ‘develop’ branch$ git push origin develop:release # Pushes data from local ‘develop’ branch to remote ‘release’ branch git fetch origin
    • Remotes$ git remoteOrigin$ git remote -vOrigin ssh://clickindia@192.168.0.77/home/clickindia/public_html/clickindia$ git remote add test ssh://clickindia@test.clickindia.com/home/clickindia/public_html....$ git remote rm origin
    • Gist of git
    • Git branching model
    • How will we work? pull master master master pull develop push release Development Test server Production 192.168.0.77Developer 1 Developer 2 Developer 3
    • Tagging and releaseOnce the code is merged into master production $ git tag -a v1.0.1 # applies v1.0.1 tag to current commit $ git tag # To list all tags $ git tag -1 ‘v1.4.2*‘ # List all tags starting with 1.4.2 $ git tag -a v1.0.1 -m ‘my version 1.0.1’ $ git show v1.4 tag v1.4 Tagger: Scott Chacon <schacon@gee-mail.com> Date: Mon Feb 9 14:45:11 2009 -0800 my version 1.4 commit 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge: 4a447f7... a6b4c97... Author: Scott Chacon <schacon@gee-mail.com> Date: Sun Feb 8 19:02:46 2009 -0800 Merge branch experiment
    • TaggingTagging later $ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch experiment a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support 0d52aaab4479697da7686c15f77a3d64d9165190 one more thing 6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch experiment 0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function 4682c3261057305bdd616e23b64b0857d832627b added a todo file 166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme $ git tag -a v1.2 9fceb02
    • Tagging
    • Everyday commandsWorking on a new feature$ git pull origin develop$ git checkout -b adposting.....did development work.....$ git commit -am ‘Created new ad posting form’$ git push origin adposting......tested feature on development server.....$ git checkout develop$ git merge --no-ff adposting$ git push origin develop:release-v1.1.2 (push to test server as release-v1.1.2.........fix testing bugs on release v1.1.2.......$ git fetch origin release-v1.1.2 ( on production only done by sysadmin )$ git checkout master$ git merge --no-ff release-v.1.1.2$ git tag -am v1.1.2 ‘released version v1.1.2’
    • Everyday commandsWorking on a hotfix$ git pull origin master$ git checkout -b hotfixv1.1.1 master.....fixed bug on test server.....$ git commit -am ‘fixed e-mail address on contact page’....... Tested by deepak ........$ git fetch origin hotfixv1.1.1 ( on production only done by sysadmin )...... Check if already on master....if not $ git checkout master$ git merge --no-ff hotfixv1.1.1$ git tag -am v1.1.1 ‘released version v1.1.1’$ git pull origin master ( on test and development servers)
    • Version numbering v0.0.0Major release Hot fixes Minor releases
    • References• Progit.org -- a complete book on git• Gitref.org -- A very simple reference of all commands