DEAD-SIMPLE VERSION CONTROL FOR YOUR TEAM WITH GIT MATTHEW REIDSMA GRAND VALLEY STATE UNIVERSITY
WHO DOESN T USE VERSION CONTROL?
VERSION CONTROL WHO?
OH BOY.
WHY YOU NEED VERSION CONTROL
GIT
GIT
WHY GIT IS AWESOME
HOW GIT WORKS
WORKING DIRECTORY
WORKING DIRECTORY add INDEX (STAGING AREA)
WORKING DIRECTORY add INDEX (STAGING AREA) commit LOCAL REPOSITORY
WORKING DIRECTORY add INDEX (STAGING AREA) commit LOCAL REPOSITORY push REMOTE REPOSITORY
My-Computer: mreidsma$ _
SCARY My-Computer: mreidsma$ _
$cd MyAwesomeApp
$cd MyAwesomeApp $touch index.html
$cd MyAwesomeApp $touch index.html $git init Initialized empty Git repository in /MyAwesomeApp/.git/
$cd MyAwesomeApp $touch index.html $git init Initialized empty Git repository in /MyAwesomeApp/.git/ $git add.
$cd MyAwesomeApp $touch index.html $git init Initialized empty Git repository in /MyAwesomeApp/.git/ $git add. $git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # #! new file: index.html #
$git commit -m First commit [master (root-commit) 7ce2952] First commit 1 file changed, 2 insertions(+) create mode 100644 index.html
$git commit -m First commit [master (root-commit) 7ce2952] First commit 1 file changed, 2 insertions(+) create mode 100644 index.html $git remote add origin git@github.com:gvsulib/ awesomeapp.git
$git commit -m First commit [master (root-commit) 7ce2952] First commit 1 file changed, 2 insertions(+) create mode 100644 index.html $git remote add origin git@github.com:gvsulib/ awesomeapp.git $git push origin master
BRANCHING
[master]
[master]
[master]
[master]
[master]
[master] [branch]
[master] [branch]
[master] merge [branch]
BRANCHES ARE CHEAP
$cd MyAwesomeApp
$cd MyAwesomeApp $git branch newfeature
$cd MyAwesomeApp $git branch newfeature $git checkout newfeature Switched to branch newfeature
$cd MyAwesomeApp $git branch newfeature $git checkout newfeature Switched to branch newfeature <!-- AWESOME FEATURE ADDING ACTION HERE -->
$cd MyAwesomeApp $git branch newfeature $git checkout newfeature Switched to branch newfeature <!-- AWESOME FEATURE ADDING ACTION HERE --> $git add.
$cd MyAwesomeApp $git branch newfeature $git checkout newfeature Switched to branch newfeature <!-- AWESOME FEATURE ADDING ACTION HERE --> $git add. $git status # On branch newfeature # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # #! modified: index.html #
$git commit -m Best feature ever [newfeature 18q7d58] Best feature ever 1 file changed, 1 insertions(+)
$git commit -m Best feature ever [newfeature 18q7d58] Best feature ever 1 file changed, 1 insertions(+) $git checkout master Switched to branch master
$git commit -m Best feature ever [newfeature 18q7d58] Best feature ever 1 file changed, 1 insertions(+) $git checkout master Switched to branch master $git merge newfeature Updating 7ce2952..18q7d58 index.html 1 + 1 file changed, 1 insertion(+)
BUT YOU CHANGED THE FILE
WORKFLOWS
LOCAL
LOCAL REMOTE
LOCAL LOCAL
LOCAL REMOTE LOCAL
LOCAL WEB SERVER REMOTE LOCAL
LOCAL WEB SERVER REMOTE LOCAL
HOW WE DO IT @ GVSU
GITHUB
GITHUB WEB SERVER
MASTER IS ALWAYS DEPLOYABLE
$ssh username@gvsu.edu
$ssh username@gvsu.edu $git mkdir MyAwesomeApp
$ssh username@gvsu.edu $git mkdir MyAwesomeApp $git cd MyAwesomeApp
$ssh username@gvsu.edu $git mkdir MyAwesomeApp $git cd MyAwesomeApp $git clone https://github.com/gvsulib/ awesomeapp.git Cloning into awesomeapp... remote: Counting objects: 1, done. remote: Compressing objects: 100% (1/1), done. remote: Total 1 (delta 21), reused 1 (delta 14) Unpacking objects: 100% (1/1), done.
$ssh username@gvsu.edu
$ssh username@gvsu.edu $git cd MyAwesomeApp
$ssh username@gvsu.edu $git cd MyAwesomeApp $git pull origin master
BUT
https://gist.github.com/3138516
OTHER FANCY FEATURES
.gitignore
diff
log
filter-branch
stash
reset
RESOURCES Download git http://git-scm.com Git Reference http://gitref.org Git and Github Bootcamp http://help.github.com/articles/set-up-git John Fink: A Gentle Introduction to Modern Version Control http://acrl.ala.org/techconnect/?p=1191 Flashbake - automated git for writers http:/bitbucketlabs.net/flashbake
THANK YOU reidsmam@gvsu.edu @mreidsma http://github.com/mreidsma http://github.com/gvsulib