SlideShare a Scribd company logo
Basic Git
2014/07/11
Casper Chen (USGI)
Why Git
• Centralized Version Control System: svn
– can’t develop without connection to VCS server
– this is slow
• Distributed Version Control System: git
– develop locally without connection to VCS server
– repository backup isn’t problem: every clone is also a
backup
• Git
– fast
– less-space for repository
– cheap local branch
2
Distributed VCS
3Computer A Computer B
Repository ServerRepository Server
Version 1
Version 2
Local RepositoryLocal Repository
Version 1
Local RepositoryLocal Repository
Version 2
FilesFiles FilesFiles
pull push
checkout commit
…
Install Git
• In Ubuntu Linux
– sudo apt-get install git
• In Fedora Linux
– sudo yum install git
• In Windows
– http://msysgit.github.com/
– http://code.google.com/p/tortoisegit/
• In Mac
– http://code.google.com/p/git-osx-installer/
4
Configure Git
• Configure the full name to be recorded in any new commit:
git config --global user.name ”Full Name”
• Configure email address to be recorded in any new commit:
git config --global user.email ”user@email.com"
• Always use colors in all git commands:
git config --global color.ui true
• Configure the editor to edit messages when commit or tag:
git config --global core.editor vim
• Specify how many context lines of diff should be displayed:
git config --global gui.diffcontext 5
• Global configuration is in ~/.gitconfig
• For more detailed, please reference “git help config”
5
Initialize Local Repository
1. Enter the directory that you want to manage
by git
– Ex. cd project
1. git init
2. git add --all . (or git add --all --force . to alow
adding otherwise ignored files)
3. git commit --message=“Init”
4. Change description of repository: echo
“description” > .git/description
6
Import Empty Folder to Repository
• touch empty_path/.gitignore
• Add .gitignore to every empty folder
– find . ( -type d -empty ) -and ( -not -regex
./.git.* ) -exec touch {}/.gitignore ;
• The content of .gitignore
# Ignore everything in this directory
*
# Except this file
!.gitignore
7
Build Remote Repository
1. git clone --bare my_project my_project.git
2. Change description of repository: echo
“description” > my_project.git/description
3. Copy my_project.git to remote site
− Ex. Copy to /home/gitserver/my_project.git of
remote site: scp -r my_project.git
gituser@192.168.1.1:/home/gitserver
8
Clone Repository from Remote
Repository
• git clone local_project_path
• git clone user@remote.ip:project_path
• git clone ssh://user@remote.ip:project_path
• Ex. git clone
gituser@192.168.1.1:/home/gitserver/my_pr
oject.git
9
Three areas
10
Working
directory
Staging area Repository
git addgit add
git commitgit commit
git checkoutgit checkout
Submit change to Local Repository
• git add some_files_changed
• git commit
11
Update Local or Remote Repository
• Update local repository from remote’s update
– git pull
– git fetch && git merge
• Update remote repository from local’s
changes
– git push
• Using “git cola” to push for specified branch
12
Remove, move, or rename file
• Delete file
– git rm file_name
• Move or rename file
– git mv file_org file_mod
13
Diff
• Compare the working directory with a specified
commit
– git diff commit
– Ex. git diff 1aj93u5
• Compare two of commits
– git diff commit_1 commit_2
– Ex. git diff 1aj93u5 239ann
• Compare the working directory with staged area
– git diff --staged
14
Clean
• Remove all untracked directories and files
– git clean -df
• Remove all files included file list in .gitignore
– git clean -x
15
Reset
• Back to specified commit
– git reset commit
– Ex. git reset 1aj93u5
• Keep modification in working tree
– git reset HEAD^
• Keep modification in staging area
– git reset HEAD^ --soft
• Destroy all modification
– git reset HEAD^ --hard
• Using gitk 16
Tag
• List all tags
– git tag
• Add a new tag
– git tag -a tagname -m “message for tag”
– Ex. git tag -a v0.1 -m “this is v0.1”
• Delete an existing local tag
– git tag -d tagname
• Send all tags to remote repository
– git push --tags
• Delete the tag of remote repository
– git push origin :refs/tags/tag_name
17
Branch• List local existing branches
– git branch
• List both local and remote branches
– git branch -a
• Create a new local branch and switch to it
– git checkout -b branch_name
• Create a new local branch starts from remote branch
– git checkout -b branch_name start_poing
– ex. git checkout -b development original/dev_branch
• Switch to an existing branch
– git checkout branch_name
• Delete an existing local branch
– git branch -d branch_name
• Send an branch to remote repository
– git push origin branch_name
• Delete the existing branch of remote repository
– git push origin :branch_name 18
Change remote HEAD to point to
another branch
• In remote git repository folder
– git symbolic-ref HEAD refs/heads/branch_name
– git update-server-info
19
Rename remote branch
• Rename the branch in the local repository
– git branch -m old_branch new_branch
• Remove the remote branch
– git push origin :old_branch
• Push the new local branch name to remote
– git push origin new_branch
20
Merge remote branch from local
commits
• git remote add remote_branch_name
remote_path
• git fetch remote_branch_name
• git cherry-pick -n commit_1 commit_2 …
• Ex.
– git remote add develop
gituser@192.168.1.1:/home/gitserver/my_project
.git
– git pull develop
– git cherry-pick abc def 21
Build Git Mirror Repository
• This method needs implementation of password-less
SSH login.
• In git mirror site:
– git clone --mirror original.address:original.git mirror.git
– cp mirror.git/hooks/post-
receive.sample mirror.git/hooks/post-receive
– echo “git push -q” >> mirror.git/hooks/post-receive
– chmod a+x mirror.git/hooks/post-receive
• In original git site:
– cp original.git/hooks/post-
receive.sample original.git/hooks/post-receive
– echo “ssh mirror.address 'cd original.git && git fetch -q”
>> original.git/hooks/post-receive
– chmod a+x original.git/hooks/post-receive
22
Add new branch for new codes to
exist remote repository
• In local new codes
– follow steps 1~4 on page 5
– rename default branch name
• git branch -m master new_branch
– add remote url
• git remote add remote_name remote_path
• Ex. git remote add origin
gituser@192.168.1.1:/home/gitserver/my_project.git
– push to remote repository
• git push remote_name new_branch
• Ex. git push origin new_branch 23
Git Web
• Install Git Web package
– sudo apt-get install gitweb
• Configure Git Web
– sudo vim /etc/gitweb.conf
– Root path of Git Web: $projectroot
• Restart Apache HTTP server
– sudo service apache2 restart
– http://localhost/gitweb
24
GUI tools for Ubuntu
• git cola
– sudo apt-get install git-cola
– commit, push, pull, diff, …
• gitk
– sudo apt-get install gitk
– Display all branches and tags: gitk --all
• tig - GUI in command line
– sudo apt-get install tig
– Display all branches and tags: tig --all
25
git cola
26
gitk --all
27
tig
• tig --all
• tig status
• tig
28
Other Resources
• Git Immersion
– http://gitimmersion.com/
• Git Pro (English)
• http://git-scm.com/book
• Git Pro ( 简体中文 )
• http://git-scm.com/book/zh
• Git Magic (English)
– http://www-cs-students.stanford.edu/~blynn/gitmagic/
• Git Magic ( 繁體中文 )
– http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_tw/
• Git 教育訓練課程投影片 (2012) form ihower
– http://ihower.tw/blog/archives/6696/
29

More Related Content

PDF
Git: An introduction of plumbing and porcelain commands
PPTX
From svn to git
PDF
Git in 5 Minutes
PPTX
Git tutorial
ODP
Git vs svn
PPTX
Git cli
PDF
Version Control Systems with git (and github) as an example
PPTX
Git: An introduction of plumbing and porcelain commands
From svn to git
Git in 5 Minutes
Git tutorial
Git vs svn
Git cli
Version Control Systems with git (and github) as an example

What's hot (20)

PPTX
Gitting out of trouble
PDF
Now i git it!!!
PDF
Advanced Git Tutorial
PPTX
Git - Basic Crash Course
PDF
Git for beginners
PDF
Presentacion git
PPTX
Git tutorial
PDF
Git tutorial
PPTX
Intro to Git DevOps Tally Presentation 101615
PPTX
Introduction to Gitlab | Gitlab 101 | Training Session
KEY
Git Tech Talk
PPTX
Advanced Git Presentation By Swawibe
PDF
Git submodule
PPT
Learn Git Basics
PDF
GIT | Distributed Version Control System
PPTX
Git in 10 minutes
KEY
Git Basics at Rails Underground
PPTX
Git One Day Training Notes
PDF
Git is my hero
Gitting out of trouble
Now i git it!!!
Advanced Git Tutorial
Git - Basic Crash Course
Git for beginners
Presentacion git
Git tutorial
Git tutorial
Intro to Git DevOps Tally Presentation 101615
Introduction to Gitlab | Gitlab 101 | Training Session
Git Tech Talk
Advanced Git Presentation By Swawibe
Git submodule
Learn Git Basics
GIT | Distributed Version Control System
Git in 10 minutes
Git Basics at Rails Underground
Git One Day Training Notes
Git is my hero
Ad

Similar to Basic git (20)

PPT
Git and fundamentals
PDF
Git and github 101
PPT
Git training
PDF
18 Git #burningkeyboards
PPTX
Source control
PDF
Git basics
PDF
Git basics
PPTX
Git basic stanley hsiao 2010_12_15
PPT
390a gitintro 12au
PPT
Fundamentals and basics of Git and commands
ODP
Git tech talk
PPTX
Git and GitHub
PDF
Learn Git Fundamentals
PPTX
Git Overview
PPTX
Introduce to Git and Jenkins
PDF
GIT_GITHUB_2016_06_17
KEY
Let's Git this Party Started: An Introduction to Git and GitHub
PDF
Git basic and workflow
PDF
Git basics for beginners
PPTX
sample.pptx
Git and fundamentals
Git and github 101
Git training
18 Git #burningkeyboards
Source control
Git basics
Git basics
Git basic stanley hsiao 2010_12_15
390a gitintro 12au
Fundamentals and basics of Git and commands
Git tech talk
Git and GitHub
Learn Git Fundamentals
Git Overview
Introduce to Git and Jenkins
GIT_GITHUB_2016_06_17
Let's Git this Party Started: An Introduction to Git and GitHub
Git basic and workflow
Git basics for beginners
sample.pptx
Ad

Recently uploaded (20)

PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Spectroscopy.pptx food analysis technology
PDF
Machine learning based COVID-19 study performance prediction
PPT
Teaching material agriculture food technology
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
KodekX | Application Modernization Development
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Approach and Philosophy of On baking technology
PDF
Empathic Computing: Creating Shared Understanding
Spectral efficient network and resource selection model in 5G networks
Spectroscopy.pptx food analysis technology
Machine learning based COVID-19 study performance prediction
Teaching material agriculture food technology
Building Integrated photovoltaic BIPV_UPV.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Understanding_Digital_Forensics_Presentation.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
KodekX | Application Modernization Development
Reach Out and Touch Someone: Haptics and Empathic Computing
The AUB Centre for AI in Media Proposal.docx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Per capita expenditure prediction using model stacking based on satellite ima...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Unlocking AI with Model Context Protocol (MCP)
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Approach and Philosophy of On baking technology
Empathic Computing: Creating Shared Understanding

Basic git

  • 2. Why Git • Centralized Version Control System: svn – can’t develop without connection to VCS server – this is slow • Distributed Version Control System: git – develop locally without connection to VCS server – repository backup isn’t problem: every clone is also a backup • Git – fast – less-space for repository – cheap local branch 2
  • 3. Distributed VCS 3Computer A Computer B Repository ServerRepository Server Version 1 Version 2 Local RepositoryLocal Repository Version 1 Local RepositoryLocal Repository Version 2 FilesFiles FilesFiles pull push checkout commit …
  • 4. Install Git • In Ubuntu Linux – sudo apt-get install git • In Fedora Linux – sudo yum install git • In Windows – http://msysgit.github.com/ – http://code.google.com/p/tortoisegit/ • In Mac – http://code.google.com/p/git-osx-installer/ 4
  • 5. Configure Git • Configure the full name to be recorded in any new commit: git config --global user.name ”Full Name” • Configure email address to be recorded in any new commit: git config --global user.email ”user@email.com" • Always use colors in all git commands: git config --global color.ui true • Configure the editor to edit messages when commit or tag: git config --global core.editor vim • Specify how many context lines of diff should be displayed: git config --global gui.diffcontext 5 • Global configuration is in ~/.gitconfig • For more detailed, please reference “git help config” 5
  • 6. Initialize Local Repository 1. Enter the directory that you want to manage by git – Ex. cd project 1. git init 2. git add --all . (or git add --all --force . to alow adding otherwise ignored files) 3. git commit --message=“Init” 4. Change description of repository: echo “description” > .git/description 6
  • 7. Import Empty Folder to Repository • touch empty_path/.gitignore • Add .gitignore to every empty folder – find . ( -type d -empty ) -and ( -not -regex ./.git.* ) -exec touch {}/.gitignore ; • The content of .gitignore # Ignore everything in this directory * # Except this file !.gitignore 7
  • 8. Build Remote Repository 1. git clone --bare my_project my_project.git 2. Change description of repository: echo “description” > my_project.git/description 3. Copy my_project.git to remote site − Ex. Copy to /home/gitserver/my_project.git of remote site: scp -r my_project.git gituser@192.168.1.1:/home/gitserver 8
  • 9. Clone Repository from Remote Repository • git clone local_project_path • git clone user@remote.ip:project_path • git clone ssh://user@remote.ip:project_path • Ex. git clone gituser@192.168.1.1:/home/gitserver/my_pr oject.git 9
  • 10. Three areas 10 Working directory Staging area Repository git addgit add git commitgit commit git checkoutgit checkout
  • 11. Submit change to Local Repository • git add some_files_changed • git commit 11
  • 12. Update Local or Remote Repository • Update local repository from remote’s update – git pull – git fetch && git merge • Update remote repository from local’s changes – git push • Using “git cola” to push for specified branch 12
  • 13. Remove, move, or rename file • Delete file – git rm file_name • Move or rename file – git mv file_org file_mod 13
  • 14. Diff • Compare the working directory with a specified commit – git diff commit – Ex. git diff 1aj93u5 • Compare two of commits – git diff commit_1 commit_2 – Ex. git diff 1aj93u5 239ann • Compare the working directory with staged area – git diff --staged 14
  • 15. Clean • Remove all untracked directories and files – git clean -df • Remove all files included file list in .gitignore – git clean -x 15
  • 16. Reset • Back to specified commit – git reset commit – Ex. git reset 1aj93u5 • Keep modification in working tree – git reset HEAD^ • Keep modification in staging area – git reset HEAD^ --soft • Destroy all modification – git reset HEAD^ --hard • Using gitk 16
  • 17. Tag • List all tags – git tag • Add a new tag – git tag -a tagname -m “message for tag” – Ex. git tag -a v0.1 -m “this is v0.1” • Delete an existing local tag – git tag -d tagname • Send all tags to remote repository – git push --tags • Delete the tag of remote repository – git push origin :refs/tags/tag_name 17
  • 18. Branch• List local existing branches – git branch • List both local and remote branches – git branch -a • Create a new local branch and switch to it – git checkout -b branch_name • Create a new local branch starts from remote branch – git checkout -b branch_name start_poing – ex. git checkout -b development original/dev_branch • Switch to an existing branch – git checkout branch_name • Delete an existing local branch – git branch -d branch_name • Send an branch to remote repository – git push origin branch_name • Delete the existing branch of remote repository – git push origin :branch_name 18
  • 19. Change remote HEAD to point to another branch • In remote git repository folder – git symbolic-ref HEAD refs/heads/branch_name – git update-server-info 19
  • 20. Rename remote branch • Rename the branch in the local repository – git branch -m old_branch new_branch • Remove the remote branch – git push origin :old_branch • Push the new local branch name to remote – git push origin new_branch 20
  • 21. Merge remote branch from local commits • git remote add remote_branch_name remote_path • git fetch remote_branch_name • git cherry-pick -n commit_1 commit_2 … • Ex. – git remote add develop gituser@192.168.1.1:/home/gitserver/my_project .git – git pull develop – git cherry-pick abc def 21
  • 22. Build Git Mirror Repository • This method needs implementation of password-less SSH login. • In git mirror site: – git clone --mirror original.address:original.git mirror.git – cp mirror.git/hooks/post- receive.sample mirror.git/hooks/post-receive – echo “git push -q” >> mirror.git/hooks/post-receive – chmod a+x mirror.git/hooks/post-receive • In original git site: – cp original.git/hooks/post- receive.sample original.git/hooks/post-receive – echo “ssh mirror.address 'cd original.git && git fetch -q” >> original.git/hooks/post-receive – chmod a+x original.git/hooks/post-receive 22
  • 23. Add new branch for new codes to exist remote repository • In local new codes – follow steps 1~4 on page 5 – rename default branch name • git branch -m master new_branch – add remote url • git remote add remote_name remote_path • Ex. git remote add origin gituser@192.168.1.1:/home/gitserver/my_project.git – push to remote repository • git push remote_name new_branch • Ex. git push origin new_branch 23
  • 24. Git Web • Install Git Web package – sudo apt-get install gitweb • Configure Git Web – sudo vim /etc/gitweb.conf – Root path of Git Web: $projectroot • Restart Apache HTTP server – sudo service apache2 restart – http://localhost/gitweb 24
  • 25. GUI tools for Ubuntu • git cola – sudo apt-get install git-cola – commit, push, pull, diff, … • gitk – sudo apt-get install gitk – Display all branches and tags: gitk --all • tig - GUI in command line – sudo apt-get install tig – Display all branches and tags: tig --all 25
  • 28. tig • tig --all • tig status • tig 28
  • 29. Other Resources • Git Immersion – http://gitimmersion.com/ • Git Pro (English) • http://git-scm.com/book • Git Pro ( 简体中文 ) • http://git-scm.com/book/zh • Git Magic (English) – http://www-cs-students.stanford.edu/~blynn/gitmagic/ • Git Magic ( 繁體中文 ) – http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_tw/ • Git 教育訓練課程投影片 (2012) form ihower – http://ihower.tw/blog/archives/6696/ 29