m.mozūras - git
DESCRIPTION
TRANSCRIPT
gitor: how I learned to stop
worrying and love source control
why you should
care
Traditional version control systems have deficiencies
Subversion, Perforce, CVS, TFS...
OH, THE PAIN!SLOWTREE CONFLICTSMERGING IS CHALLENGINGBRANCHES ARE JUST COPIES
using svn
using git
is awesomegit
It’s distributed!Distributed Version Control System
Every repository is equal.
You can work offline.
Fast as lightning.
add status diff log commit branch
git mercurial bazaar
Very efficient.
git clone rails - 53 seconds40mb, 2356 files, 29045 commits
Great branching and merging.
Any workflow you want, you got it...
Shared repository
Blessed repositoryLinus Torvalds
Lieutenants
Developers
how to install
Linux: apt-get install git-coreMac OS X: brew install gitWindows: chocolatey install msysgit
getting
started
git config --global user.name ...git config --global user.email ...
git init
master has no special meaning.It’s just a default branch.
git add
Staging area stores info about what will go into next commit.
working directory
staging area repository
commit
checkout the project
stage files
git commit
189f30b664981e4397625791c8ea3bbb5f2279a3
Commit “name” is a 40-digit SHA
commit 189f30b...
tree e8455...
parent(s) nil
author Mindaugas...
committer Mindaugas...
Initial commit
tree e8455...
blob bc52a... README.md
blob bc52a...
SVN, CVS, Perforce store differences between commits.
Git stores snapshots.
commit0 commit1 commit2
tree0 tree1 tree2
blob A
blob B
blob A blob A2
blob B2 blob B2
Basic training complete.
andpushing
pulling
git remote add origin git@git...
git push origin master
git pull origin master
and mergingbranching
git branch name
Branch is a reference to the head of a line of work.
C0 C1
master
feature
git checkout name
git merge name
C0
master
C1 C2
F1 F2
feature
C0
master
C1 C2
F1 F2
feature
C3
git rebase name
C0
master
C1 C2
F1 F2
feature
C0
master
F2 C2C1 F1
feature
merge is fine, but in a lot of cases, rebase is better.
Branching - too easy not to do
manipulating
history
git commit --amend
git rebase --interactive
Interactive rebase lets you: reword, edit, squash, fixup, exec, remove and reorder.
You can change history of remote repository with git push --force.
Be careful!
Rewriting history is funand useful!
svngit-
git svn clone http://...
git svn rebase ~ svn update
git svn dcommit ~ svn commit
GitHub
The best way to collaborate.
More than 1.6 million people, 2.8 million repositories.
Used by individuals.
And organizations.
thoughts
closing
blame bisect cherry-pick clean cvsimport describe diff fetch filter-branch grep request-pull revert svnimport stash submodule tag and more...
git-scm.comgitready.comgitimmersion.comontwik.com/category/git-github
RESOURCES
Git != Subversion + Magic
The slogan of Subversion for a while was "CVS done right". If you start with that kind of slogan, there's nowhere you can go. There is no way to do CVS right.
Linus Torvalds
Zach Holman @holman
thenounproject.com
thanks to:
codingfearlessly.com
twitter.com/mmozuras
github.com/mmozuras
thanks!