Post on 16-May-2015
description
GIT WITH THE PROGRAMDrupal Camp LA 2013
Matthew WratherWrather Creative
ABOUT ME
• Freelance Drupal Developerand Web Generalist since 1997
• Drupal since 4.6
• Most Definitely Available for Work!matt@wrathercreative.com(510) WRA-THER
SOURCES
• A great talk by @merlyn himself, Randal Schwartz CC-BY-SA• On Vimeo at https://vimeo.com/35778382• Slides at http://slidesha.re/z7nQrG
• Pro Git by Scott Chacon CC-BY-NC-SA• Read for free at http://git-scm.com/book
• And many more at http://lmgtfy.com/?q=git+tutorial
AGENDA
1. Why Use Version Control
2. Git basic concepts
3. Demo
Time for questions after each section.
DOESN’T USE VERSION CONTROLslworking on Flickr
CC-BY-NC-SA
QUESTIONS?
WHAT IS GIT FOR?
Git is for…
• Tracks a tree of related files• Distributed• High Performance• Easy & Fast Branch/Merge• Good Data Integrity• Collaborative
Git is not for…
• Tracking unrelated files• Tracking File Metadata• Binary Files
WRAP YOUR MIND AROUND
• Distributed: Your repository is complete unto itself.
• Anyone can commit!*
*To their own repo.
• (Once you start fetching and pushing work,permissions come into play.)
• There can still be a central, blessed repo.
• Universal Public Identifiers: SHA1 hashes
OBJECTS IN GIT
• Blobs (actual data)
• Trees (directories of blobs or of other trees)
• A commit, which is:
• A tree
• Zero or more parent commits
• Metadata (commit message, name email, timestamp)
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
WE NEED TO TALKABOUT COMMITMENT
Do this
Work
Stage
Commit
here
Filesystem
Staging Area
Repository
(aka here)
Working Tree
Index
HEAD
by
writing code
git add
git commit
Rinse and Repeat
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
$ git commit
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
$ git branch testing
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
$ git checkout testing
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
$ subl awesome.module$ git add awesome.module$ git commit -m ‘changed awesome module’
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
$ git checkout master
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
BRANCHES
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
MERGING
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
MERGING
$ git checkout -b iss53 # shortcut for:$ # git branch iss53$ # git checkout iss53
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
MERGING
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
MERGING
FAST FORWARD MERGE
$ git checkout master$ git merge hotfix
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
FAST FORWARD MERGE
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
FAST FORWARD MERGE
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
FAST FORWARD MERGE
$ git branch -d hotfix
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
RECURSIVE MERGE
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
RECURSIVE MERGE
$ git checkout master$ git merge iss53
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
REBASING
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
REBASING
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
REBASING
graphic from Pro Git by Scott ChaconCC-BY-NC-SA
REBASING
$ git checkout experiment$ git rebase master
Thou shalt not rebase commits that youhave pushed to a remote repository.
REMOTE REPOSITORIES
• All these things that we’ve done so far happen in the privacy of our own computer and don’t affect anything else.
• You can track what’s going on in other repositories by adding them as “remotes”
git remote add <nickname> <remote-url>
• When you copy a repo using the git clone command,you’ll automatically have a remote called origin
REMOTE REPOSITORIES
• When you’ve done working, you can “push” your work up to a remote repository
git push <remote-nickname> <branch>
git push origin master
• But if someone else has done work and pushed it to the remote repo, git won’t let you overwrite.
REMOTE REPOSITORIES
• To find out what’s on the server, you can “fetch” from a remote repository
git fetch <remote-nickname>
git fetch origin
• Remote branches will be tracked locally, prefixed with the remote nickname. The master branch on origin becomes origin/master locally.
REMOTE REPOSITORIES$ git push origin master
[git error message]
$ git fetch origin$ git merge origin/master$ git push master
[HUGE SUCCESS!]
QUESTIONS?
DEMO
THANK YOU!Matthew Wrather • @mwrather
matt@wrathercreative.com • (510) WRA-THER