Git introduction
for beginners
Aaron Wang
What's git
-
A distributed version control system
- A content-addressable file system
- A stupid content tracker
- Write code
- Write book: https://www.gitbook.io/
- Started by Linus Torvalds for Linux kernel development @ 2005
Git characteristics
-
Distributed & Decentralized, client == server
- Fast Branching & Merging
- Efficient In Storage & Network
- Toolkit Based Design
- Over a hundred commands, countless options...
- Flexible Workflow
Local operations
-
Git Directory
- Working Directory
- Index(Stage/Cache)
get started
- git help <command>
-
git config --global user.name <name>
git config --global user.email <email>
.git/config > ~/.gitconfig > /etc/gitconfig
- git init/git clone <url>
- git status, git diff
- git add, git diff --cached
- git commit -m <message>
- .gitignore: https://github.com/github/gitignore
- git log
What's a good commit
-
http://dev.solita.fi/2013/07/04/whats-in-a-good-commit.html
- Small & Complete
- Commit message:
<scope>: <short summary>
\n
<detail>
Take it seriously, form a good habit - Commit Often & Commit Early
Revert changes
- uncached: git checkout <paths>
- cached: git reset <tree-ish> -- <paths>
- committed:
- git reset <tree-ish> -- <paths>; git checkout <paths>
- git reset <commit> --hard
- git revert <commit>
Remote Operations
- git clone <url>
- https://github.com/git/git.git
- ssh
- scp style: git@github.com:git/git.git
- ssh://git@github.com/git/git.git
- /home/git/git.git
- git://github.com/home/git/git.git
-
git remote
- git pull == git fetch + git merge
- git pull --rebase == git fetch + git rebase
- git push
Understanding branch
-
git checkout -b <name>
- git branch
- git checkout -t <remote>/<branch>
- git merge <name>[, solve conflicts, git commit]
- Branch is just a ref to a commit
-
It moves
X --- Y --- Z
/ \
A --- B --- C --- D --- H - git push <remote> <src>:<dst>
- git push <remote> :<dst>
Data Model
Directed Acyclic Graph
glossary
-
https://www.kernel.org/pub/software/scm/git/docs/gitglossary.html
-
object: the unit of storage
- blob: file content
- tree: like directory
- commit: ref to a tree with metadata
- branch: active line of development
- tag: static, ref to a particular point
- HEAD: the current branch, .git/HEAD
GLOSSARY
- dangling: unreachable
- detached: arbitrary commit in HEAD, not a particular branch
- dirty: uncommitted modifications
- fast-forward: no merge commit is needed
- hash: object name
- ref: SHA1 or name, .git/refs/
- tree-ish: a ref pointed to either a commit object, a tree object, or a tag object
- ......
Centralized workflow
-
Like the other VCSs
- "Better not use git as svn!"
Feature Branch
-
Develop features in separated branch
-
pull/merge requests
gitflow
gitflow
- apt-get install git-flow
- git flow init
- git flow feature start/finish <name>
- git flow release start/finish <name>
- git flow hotfix start/finish <name>
tuisongbao dev process
-
git fetch
- git checkout -t origin/develop -b whatsThisBranchFor
-
# Coding...
-
# Fetch new code on origin/develop in the middle
-
git stash
-
git pull --rebase
- git stash pop
-
# Coding...
-
git add && git commit
- git pull --rebase
-
git push origin whatsThisBranchFor -f
Quick tips
- Conquer Git
- Read The Output & RTFM
- Read books, systematic learning
- Practice
- git stash: anonymous commit
- committed/stashed changes are recoverable
- git reflog
- git cherry-pick
-
apt-get install gitk git-extras
- Display git status in your command prompt
- Customize PS1
- Use oh-my-zsh plugin
References
HOMEWORK
-
merge vs rebase
- git rebase -i
- merge algorithom (optional)
What's gitlab
- An open source copy of GitHub
- Self hosted git management application
- Users / Groups / Projects
- Access Control
- Merge Request / Code Review
- Web Hooks
- GitLab Flavored Markdown
- Simple Issue Tracker
- Simple Wiki System
How gitlab works
Tuisongbao code review process
- Committer rebase feature branch onto to newest develop branch & push it to GitLab
- Open a merge request to develop branch & assign to code reviewer
- Reviewer do the code reivew
- Point out issues: inconsistent coding style/convention, incorrect logic, missed edge case check, code smell, etc
- Learn good parts from it
- Knowing what the committer is working on, how is it going
- Committer fix issues until reviewer is satisfied
- Reviewer reassign the MR to develop branch maintainer
- Maintainer merge it in
Markdown
- A lightweight markup language
Textile/BBCode/MediaWiki => HTML - Created by John Gruber and Aaron Swartz
- Flavors:
- PHP Extra
- StackOverflow
- GitHub
- GitLab
http://git.augmentum.com.cn/help/markdown
Thanks
Git Introduction for Beginners
By Aaron Wang
Git Introduction for Beginners
- 4,364