Your SlideShare is downloading. ×
Git Introduction
Fast Version Control
Who am I
• Gareth Hall
• Lead Developer and Hyundai New Zealand
• Director at Communica
(http://communica.co.nz)
What is git?
• Git is a distribute version control system
developed by Junio Hamano & Linus
Torvalds.
• Git does not use a...
Why it’s named git?
• Quoting Linus: “I’m egotistical, and I name
all my projects after myself. First Linux, now
git”
• De...
What does git do?
• Git tracks changes to content.
Advantages of git
• Everything is local (almost)
• Fast
• Every clone / branch is a backup
• Work offline
• No single poin...
Three States
Individual Workflow
Collaborative Workflow
Gitflow 1
Gitflow II
Basic Commands
Syntax: git <subcmd>
git init
•Create an empty git repository or reinitialize
an existing one
#:>git init
Initialized empty Git repository in
/...
git status
• Show the working tree status
#:>git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use ...
git add
• Add file contents to the index
• git add .
• git add <filename> <filenname>
git status
#:>git add .
#:>git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --...
git commit
•Record changes to the repository
#:>git commit -m "first commit"
[master (root-commit) 5f8a8d4] first commit
2...
git log
•Show commit logs
#:>git log
commit 5f8a8d486ae1656b51194186c0dfb97ae1ec9835
Author: Gareth Hall <gareth@communica...
Edit files
#:>git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be commit...
#:>git add index.php
#:>git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unst...
• #:>git commit -m "Changed output to table"
[master fffacb4] Changed output to table
1 file changed, 10 insertions(+), 2 ...
#:>git log
commit fffacb43627c5a44850b4b1543dc359f5d95edd6
Author: Gareth Hall <gareth@communica.co.nz>
Date: Sat Feb 16 1...
#:>git diff includes/helpers.php
diff --git a/includes/helpers.php b/includes/helpers.php
index 5c9a1fe..002256c 100644
--...
#:>git add .
#:>git commit -m "Added logger"
[master 817dee6] Added logger
1 file changed, 9 insertions(+), 4 deletions(-)...
git show• Show various types of objects
#:>git show fffacb4
commit fffacb43627c5a44850b4b1543dc359f5d95edd6
Author: Gareth...
git branch
•List, create, or delete branches
#:>git branch outputHelper
#:>git branch
* master
outputHelper
git checkout
•Checkout a branch or paths to the working tree
#:>git checkout outputHelper
Switched to branch 'outputHelper...
Develop new Feature
#:>git status
# On branch outputHelper
# Changes not staged for commit:
# (use "git add <file>..." to update what will be ...
#:>git add includes/helpers.php
#:>git commit -m 'Added doc block to logger function'
[outputHelper df78fc4] Added doc blo...
#:>git log --oneline --decorate --graph
* 51da4b7 (HEAD, outputHelper) Refactored with new table output helper
* df78fc4 A...
git merge
• Join two or more development histories together
#:>git merge outputHelper
Updating 817dee6..51da4b7
Fast-forwa...
#:>git log --oneline --decorate --graph
* 51da4b7 (HEAD, outputHelper, master) Refactored with new
table output helper
* d...
git reset
• Reset current HEAD to the specified state
git push
• Update remote refs along with associated
objects
git fetch
• Download objects and refs from another
repository
git merge
• Join two or more development histories
together
git pull
• Fetch from and merge with another
repository or a local branch
• fetch + merge
How in Drupal?
• Add all of Drupal to git
• Use the Features module to move
configuration
• UUID Features to move content ...
Git Hosting Service
• Bitbucket (htt://bitbucket.org)
• Github (http://github.com)
• Run your own
• Gitosis
• Gitolite
Deployment
• Shell Access
• Continous Integration
• I don’t have shell access
• Setup your server as a remote
Deployment with shell
Continous Intergration
• Heroku (http://heroku.com)
• Pagoda (http://pagodabox.com)
• Bamboo
(http://atlassian.com/softwar...
I don’t have shell
• Deploy (http://www.deployhq.com)
Server as Remote
• Will need to use git hooks
Git Hooks
Git Hooks
• #>vim post-receive
• #!/bin/sh
• cd ..
• GIT_DIR='.git'
• umask 002 && git reset --hard
Git GUI’s
Resources
• Git (http://git-scm.com)
• Wiki
(http://en.wikipedia.org/wiki/Git_(software)
)
• Git Essentials
(https://tutsp...
Visual Version Control
Gource (http://code.google.com/p/gource/)
Questions
Upcoming SlideShare
Loading in...5
×

Git Introduction

356

Published on

After talking to several Drupal followers during our last meetup, I realised quite a few people still don't employ version control.

I strongly consider this best practice when building a site, and thought it would be a good opportunity to go over its importance and how you can make it work for you.

Git offers several advantages:
• It's super fast
• It's easy.
• And no you don't need to be familiar with Command Line code (there are several great GUI's out there).

GIT Version Control works by keeping track of all successive changes you make to a site.
The biggest advantage of this is easily undoing any mistakes you might make along the way.
It's a great feeling to know Version Control has your back that you can roll back if something goes catastrophically wrong.
It's also a big bonus in collaborative development.
As soon as more than one person works on a project things get a lot more complicated.
What happens when 2 edits effect the same file? How do you know what's new, what's old and what's changed?
No worries, simply merge the variations and let GIT deal with the rest.

GIT is not just for the developers of this world but can be a life saver for themers, site maintainers and the like.

Most people will admit they should use it, but either don't know how or believe it's hard to integrate.
The reality is that it's actually pretty simple and once you start integrating GIT into your workflow you'll ask yourself "Why the hell did I keep using ftp" - I know I did.

FTP is so yesterday, its slow, it's cumbersome to use and it's a very manual method.
Switch to GIT, start using GIT, and never look back.

Published in: Software, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
356
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
24
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Git Introduction"

  1. 1. Git Introduction Fast Version Control
  2. 2. Who am I • Gareth Hall • Lead Developer and Hyundai New Zealand • Director at Communica (http://communica.co.nz)
  3. 3. What is git? • Git is a distribute version control system developed by Junio Hamano & Linus Torvalds. • Git does not use a centralised server. • Git runs on major operating system like OS X, Windows, Unix & Linux
  4. 4. Why it’s named git? • Quoting Linus: “I’m egotistical, and I name all my projects after myself. First Linux, now git” • Def: git - British slang for “pig headed, they are always correct , argumentative”
  5. 5. What does git do? • Git tracks changes to content.
  6. 6. Advantages of git • Everything is local (almost) • Fast • Every clone / branch is a backup • Work offline • No single point of failure • Lightweight • Branching is cheap and merging is easy • Many different workflows possible • Distributed • Every file and commit is checksummed • Staging area • Free and open source
  7. 7. Three States
  8. 8. Individual Workflow
  9. 9. Collaborative Workflow
  10. 10. Gitflow 1
  11. 11. Gitflow II
  12. 12. Basic Commands Syntax: git <subcmd>
  13. 13. git init •Create an empty git repository or reinitialize an existing one #:>git init Initialized empty Git repository in /Users/garethhall/Sites/git_intro/.git/
  14. 14. git status • Show the working tree status #:>git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # includes/ # index.php nothing added to commit but untracked files present (use "git add" to track)
  15. 15. git add • Add file contents to the index • git add . • git add <filename> <filenname>
  16. 16. git status #:>git add . #:>git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached <file>..." to unstage) # # new file: includes/helpers.php # new file: index.php #
  17. 17. git commit •Record changes to the repository #:>git commit -m "first commit" [master (root-commit) 5f8a8d4] first commit 2 files changed, 48 insertions(+) create mode 100644 includes/helpers.php create mode 100644 index.php
  18. 18. git log •Show commit logs #:>git log commit 5f8a8d486ae1656b51194186c0dfb97ae1ec9835 Author: Gareth Hall <gareth@communica.co.nz> Date: Sat Feb 16 14:43:40 2013 +1300 first commit
  19. 19. Edit files
  20. 20. #:>git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: includes/helpers.php # modified: index.php # no changes added to commit (use "git add" and/or "git commit -a")
  21. 21. #:>git add index.php #:>git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: index.php # # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: includes/helpers.php #
  22. 22. • #:>git commit -m "Changed output to table" [master fffacb4] Changed output to table 1 file changed, 10 insertions(+), 2 deletions(-) #:>git status # On branch master # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: includes/helpers.php # no changes added to commit (use "git add" and/or "git commit -a")
  23. 23. #:>git log commit fffacb43627c5a44850b4b1543dc359f5d95edd6 Author: Gareth Hall <gareth@communica.co.nz> Date: Sat Feb 16 16:10:45 2013 +1300 Changed output to table commit 5f8a8d486ae1656b51194186c0dfb97ae1ec9835 Author: Gareth Hall <gareth@communica.co.nz> Date: Sat Feb 16 14:43:40 2013 +1300 first commit
  24. 24. #:>git diff includes/helpers.php diff --git a/includes/helpers.php b/includes/helpers.php index 5c9a1fe..002256c 100644 --- a/includes/helpers.php +++ b/includes/helpers.php @@ -1,5 +1,4 @@ <?php - /** * Pretty Print Helper * @@ -28,6 +27,12 @@ function dd($data, $die = false) { echo '<pre>'; var_dump($data); - echo '</pre>'; - $die ? die() : null; -} No newline at end of file + echo '</pre>'; + $die ? die() : null; +} + +function logger($user_id, $message) +{ + $log_entry = $user_id . ',' . $message; + return file_put_contents('log.log', $log_entry) ? true : false; +} git diff
  25. 25. #:>git add . #:>git commit -m "Added logger" [master 817dee6] Added logger 1 file changed, 9 insertions(+), 4 deletions(-) #:>git log --oneline --decorate 817dee6 (HEAD, master) Added logger fffacb4 Changed output to table 5f8a8d4 first commit
  26. 26. git show• Show various types of objects #:>git show fffacb4 commit fffacb43627c5a44850b4b1543dc359f5d95edd6 Author: Gareth Hall <gareth@communica.co.nz> Date: Sat Feb 16 16:10:45 2013 +1300 Changed output to table diff --git a/index.php b/index.php index f1f4a05..df11b0b 100644 --- a/index.php +++ b/index.php @@ -10,6 +10,14 @@ if (($xml = @simplexml_load_file('https://www.bnz.co.nz/XMLFeed/portal/fcs/xml') } } -pp($bnz_rates, true); - +print '<table border="1">'; + print '<tr>'; + print '<th>Code</th><th>Rate</th>'; + print '</tr>'; + foreach ($bnz_rates as $code => $rate){ + print '<tr>'; + print '<th>' . $code . '</th><th>' . $rate . '</th>'; + print '</tr>'; + } +print '</table>';
  27. 27. git branch •List, create, or delete branches #:>git branch outputHelper #:>git branch * master outputHelper
  28. 28. git checkout •Checkout a branch or paths to the working tree #:>git checkout outputHelper Switched to branch 'outputHelper' #:>git branch master * outputHelper
  29. 29. Develop new Feature
  30. 30. #:>git status # On branch outputHelper # Changes not staged for commit: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: includes/helpers.php # modified: index.php # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # includes/.DS_Store # includes/output_helper.php no changes added to commit (use "git add" and/or "git commit -a")
  31. 31. #:>git add includes/helpers.php #:>git commit -m 'Added doc block to logger function' [outputHelper df78fc4] Added doc block to logger function 1 file changed, 8 insertions(+) #:>git commit -a -m 'Refactored with new table output helper' [outputHelper 51da4b7] Refactored with new table output helper 3 files changed, 38 insertions(+), 11 deletions(-) create mode 100644 includes/.DS_Store create mode 100644 includes/output_helper.php
  32. 32. #:>git log --oneline --decorate --graph * 51da4b7 (HEAD, outputHelper) Refactored with new table output helper * df78fc4 Added doc block to logger function * 817dee6 (master) Added logger * fffacb4 Changed output to table * 5f8a8d4 first commit #:>git checkout master Switched to branch 'master' #:>git log --oneline --decorate --graph * 817dee6 (HEAD, master) Added logger * fffacb4 Changed output to table * 5f8a8d4 first commit
  33. 33. git merge • Join two or more development histories together #:>git merge outputHelper Updating 817dee6..51da4b7 Fast-forward includes/.DS_Store | Bin 0 -> 6148 bytes includes/helpers.php | 8 ++++++++ includes/output_helper.php | 36 ++++++++++++++++++++++++++++++++++++ index.php | 13 ++----------- 4 files changed, 46 insertions(+), 11 deletions(-) create mode 100644 includes/.DS_Store create mode 100644 includes/output_helper.php
  34. 34. #:>git log --oneline --decorate --graph * 51da4b7 (HEAD, outputHelper, master) Refactored with new table output helper * df78fc4 Added doc block to logger function * 817dee6 Added logger * fffacb4 Changed output to table * 5f8a8d4 first commit
  35. 35. git reset • Reset current HEAD to the specified state
  36. 36. git push • Update remote refs along with associated objects
  37. 37. git fetch • Download objects and refs from another repository
  38. 38. git merge • Join two or more development histories together
  39. 39. git pull • Fetch from and merge with another repository or a local branch • fetch + merge
  40. 40. How in Drupal? • Add all of Drupal to git • Use the Features module to move configuration • UUID Features to move content (alpha!)
  41. 41. Git Hosting Service • Bitbucket (htt://bitbucket.org) • Github (http://github.com) • Run your own • Gitosis • Gitolite
  42. 42. Deployment • Shell Access • Continous Integration • I don’t have shell access • Setup your server as a remote
  43. 43. Deployment with shell
  44. 44. Continous Intergration • Heroku (http://heroku.com) • Pagoda (http://pagodabox.com) • Bamboo (http://atlassian.com/software/bamboo)
  45. 45. I don’t have shell • Deploy (http://www.deployhq.com)
  46. 46. Server as Remote • Will need to use git hooks
  47. 47. Git Hooks
  48. 48. Git Hooks • #>vim post-receive • #!/bin/sh • cd .. • GIT_DIR='.git' • umask 002 && git reset --hard
  49. 49. Git GUI’s
  50. 50. Resources • Git (http://git-scm.com) • Wiki (http://en.wikipedia.org/wiki/Git_(software) ) • Git Essentials (https://tutsplus.com/course/git-essentials/) • Change Management andVersion Control (http://buildamodule.com)
  51. 51. Visual Version Control Gource (http://code.google.com/p/gource/)
  52. 52. Questions

×