Page 1
Getting Into Git8/11/2012
Rick [email protected] @rickumalihttp://tech.rickumali.com/
This presentation is on Google Drive at:
http://sn.im/git-talk-2012
There you can read the 'speaker notes' for this presentation. You can also provide feedback at:
https://joind.in/6830
Page 2
Questions I Plan to Answer
What is source control?
What is the big deal with Git?
Can you show me a little Git?Commits. Branches. Merges. Remote repos.
Page 3
What is Source Control?
Source code control is the most important practice a coding professional can do.
A mechanism to track changes in source code.
Used for version history, auditing, and recovery.
Page 4
Revision Control Example: Wiki
Page 5
Revision Control Example: Git
This is what we'll be trying.
Page 6
Git
Git is an open source, distributed version control system designed for speed and efficiency.
● Freedom● No "server" required● Unique architecture
Page 7
Installing Git
http://git-scm.com/book/en/Getting-Started-Installing-Git
The installation is very easy!
Page 8
Warning: Command Line Ahead
Page 9
Our Example: A Basic Drupal Module
Page 10
Creating a "Repository"
Let's pretend we're developing a Drupal module.
% cd web/sites/all/modules% mkdir dumpstamp% cd dumpstamp% git init
"git init" creates the entire Git repository. No server interaction required!
Page 11
Committing Your First File
To 'commit' means 'to save the state' of your work. You must first 'add' this change to the 'staging area'.
% vi README.txt% git add README.txt% git commit -m "First commit. README file."
Use 'git help' to learn all the switches. -m stands for message.
Page 12
Looking at the Repository History
% git log
Each 'commit' contains an ID, along with the author information from earlier, and a time stamp.
% gitk
GUI tools can help you visualize the 'repo.'
Page 13
Adding More Files
% vi dumpstamp.info dumpstamp.module% git status% git add .% git commit
This second commit saves the work of adding two files by using 'git add .'.
The .module and .info files are the two required files for every Drupal module.
Page 14
Enabling Our Drupal Module% drush pm-info dumpstamp
% drush pm-enable dumpstamp
Page 15
Examining Changes to Files
% vi dumpstamp.module% git status% git diff% git add dumpstamp.module% git commit% git log
The above is a typical 'workflow'.
Git offers suggestions and hints as you use it.
Page 16
Doing More Changes
% vi dumpstamp.module% git diff% git commit -a
Or even:
% git commit -a -m "Commit message."
Another typical 'workflow'.
Page 17
Looking at the Log Again
The history can be examined different ways.
% git log% git log --format=short% git log --format=oneline% git log --oneline
Page 18
Revisiting History
You can 'revisit' any point of your history.
% git checkout SHAID
Every commit is known by its SHA ID.
This is the first step in making a branch! (Use git checkout master to revert.)
Page 19
Branching and Merging Next, But...
What we have covered so far is probably 70-80% of what you will do with git.
Adding and committing files are the heart of git (and any version control system).
Page 20
Git encourages experimentation, by making branching very easy.
Branching
Page 21
Branching: git branch
% git branch BRANCH SHA1% git checkout BRANCH
Make some edits on a change below the master, then commit.
git branch makes a branch from the branch you're on (default branch is 'master').
Page 22
Branching: Starting State
SHA 1Amaster
NOTE: 'master' is a branch that's created 'by default'.
Page 23
Branching: Make Some Changes
SHA 1A
SHA 2Bmaster
git commit
Page 24
Branching: Making a Branch
SHA 1A
SHA 2Bmaster
branch1
git branch "branch1" SHA1Agit checkout "branch1"
OR git checkout -b branch1 SHA1A
Page 25
Branching: Changes on the Branch
SHA 1A
SHA 2Bmaster branch1SHA 3C
(Make changes in "branch1".)git commit
Page 26
Visualizing the Branches
Page 27
Merging
Bringing two branches together.
First 'checkout' the branch you want to merge into (typically master), then 'merge' the branch.
% git checkout master% git merge BRANCH
Page 28
Merging: Starting State
SHA 1A
SHA 2Bmaster branch1SHA 3C
Page 29
Merging: Two Steps
SHA 1A
SHA 2B
master
branch1SHA 3C
SHA 4D
git checkout mastergit merge branch1
Page 30
Merging: The Hard Part
Manual 'merging' may be required.
Page 31
Visualizing the Merge
Page 33
Remote Branches
You can 'browse' public Git repositories for code that you want to examine or use.
You can upload a local Git repository to a public Git repository.
Page 34
Common Public Git Repositories
Page 35
Browsing and Grabbing Code
git clone [email protected] :rickumali/RickUmaliVanityWebsite.git
Page 36
Uploading Code (to Github)
Create a key pair on your machine.
Create a repository (on Github).
Add a 'remote' (via git remote add).
Upload your code (via git push).
Page 37
Creating a Key Pair
Page 38
Creating a Repository
Page 39
Adding a Remote, then Upload
Page 40
After An Upload (to Github)
git clone [email protected] :rickumali/DumpStamp.git
Page 41
Next Steps
Install Git.
Commit your code changes frequently.
Log verbosely (in commit messages).
Experiment (branch) often.
Page 42
Getting Into Git
Rick [email protected] @rickumalihttp://tech.rickumali.com/
Thank you!
Page 43
Resources
http://git-scm.org/Both "Pro Git" book, and Git reference
http://gitref.org/A "quicker" Git reference
http://www-cs-students.stanford.edu/~blynn/gitmagic/"Friendlier" Git walk-through (git magic).
http://drupal.org/node/803746A workflow for using Git with Drupal.
http://www.mail-archive.com/[email protected] /msg39091.html
Linus on "clean history."
Page 44
Resources
http://www.youtube.com/watch?v=4XpnKHJAok8Linus Torvalds (Git creator) (May '07)
http://www.youtube.com/watch?v=8dhZ9BXQgc4Randal Schwartz (Perl expert and Git old-timer) (Oct
'07)http://www.youtube.com/watch?v=ZDR433b0HJY
Scott Chacon (Pro Git author) (July '11)