According to README in git source code:
The name "git" was given by Linus Torvalds when he wrote the very first version. He described the tool as "the stupid content tracker" and the name as (depending on your mood): - random three-letter combination that is pronounceable, and not actually used by any common UNIX command. The fact that it is a mispronunciation of "get" may or may not be relevant. - stupid. contemptible and despicable. simple. Take your pick from the dictionary of slang. - "global information tracker": you're in a good mood, and it actually works for you. Angels sing, and a light suddenly fills the room. - "goddamn idiotic truckload of sh*t": when it breaks
What if more than one coder works on the same project?
How can source code be synchronized in a sensible way?
Work Area
Staging Area
Public Record
Hack at code here.
Changes visible only to you.
Where ideas are tested and made to work properly.
Finished changes stored here.
Prettier version of work area, with ugly bits skipped.
Still private.
Key insight: Organize code into repositories that record logical change sets that can then be synchronized and merged with other changes
git REPOSITORY
add
commit
Stores recorded public patches.
Logical sets of changes.
Synchronized as whole units.
Repository A
Patch 1
Repository B
Patch 2
git pull
Repository A
Patch 1
Repository B
Patch 2
Before:
After:
Repository A
Patch 2
Pulling patches from another repository adds those sets of changes to yours.
Repository A
Patch 1
Repository B
Patch 2
git push
Repository A
Patch 1
Repository B
Patch 2
Before:
After:
Repository A
Patch 1
Pushing patches to another repository adds those sets of changes to theirs.
Patch 2
Patch 2
Repository A
Patch 1
Repository B
Patch 2
git pull
Repository A
Patch 1&2
Repository B
Patch 2
Before:
Repository A
If patches have changes that conflict then you must choose how to edit the two versions to resolve the conflict after a pull
Then you can push the fix
git push
~$ git clone username@computer:/path/to/git/repository.git
# This creates a clone (copy) of a remote git repository
# (using SSH if needed: see next few slides)
~$ cd repository
# Change to repository directory to commence work
<work on stuff here>
~/repository$ git add file1 file2 file3
# After you are satisfied with some changes, add the
# changed files to the "staging area"
~/repository$ git commit -m "Description of new patch"
# Create a new patch from all changes added to the
# staging area, including a description of that set of
# changes as a logically complete addition to the code
# TIP: Try not to make commits that have syntax errors
# or obvious errors. Think of commits as finished
# changes that you are ready for others to read.
~/repository$ git pull
# Check that you are up-to-date with the remote repo
~/repository$ git push
# Push your new committed patch(es) to the remote repo
clone
add
commit
pull
push
(do work)
Global user settings:
~$ git config --global user.name "Your Full Name"
~$ git config --global user.email "yourname@email.domain"
~$ git config --global push.default simple
~$ git config --global core.editor vim
(vim is the recommended editor: it is almost everywhere and powerful)
Other useful commands:
~$ git status -s
# Look at current state of repository
# TIP: USE THIS OFTEN to figure out what's going on
~$ git log
# Look at list of all committed patches
~$ git diff filename
# See unadded changes in filename
~$ git diff origin/master filename
# See changes from remote repo in filename
~$ git grep "search string"
# Find instances of "search string" in code
##
### If you screw up:
##
~$ git checkout -- filename
# Restore last committed version of modified filename
~$ git fetch origin
~$ git reset --hard origin/master
# obliterate all recent changes
# resets entire repository to last remote repository state
# TIP: Use this only as a last resort after a big screwup
status
log
diff
grep
checkout
fetch
reset
GitHub is a central server that hosts git repositories in the cloud for the open source community
Patch 1
Repository
Patch 1
git clone
git pull
git push
Repository
GitHub
Repository
Patch 1
This makes it easy for multiple coders to work on the same master code base
Creating SSH Keys:
~$ if [ ! -e ~/.ssh/id_rsa.pub ]; then ssh-keygen; fi
Adding SSH keys to GitHub:
~$ cat ~/.ssh/id_rsa.pub
~$ ssh git@github.com
Practice makes perfect.
Keep references handy until you remember commands on command.