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
• Distri...
Distributed VCS
3Computer A Computer B
Repository ServerRepository Server
Version 1
Version 2
Local RepositoryLocal Reposi...
Install Git
• In Ubuntu Linux
– sudo apt-get install git
• In Fedora Linux
– sudo yum install git
• In Windows
– http://ms...
Configure Git
• Configure the full name to be recorded in any new commit:
git config --global user.name ”Full Name”
• Conf...
Initialize Local Repository
1. Enter the directory that you want to manage
by git
– Ex. cd project
1. git init
2. git add ...
Import Empty Folder to Repository
• touch empty_path/.gitignore
• Add .gitignore to every empty folder
– find . ( -type d ...
Build Remote Repository
1. git clone --bare my_project my_project.git
2. Change description of repository: echo
“descripti...
Clone Repository from Remote
Repository
• git clone local_project_path
• git clone user@remote.ip:project_path
• git clone...
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
• Upd...
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 com...
Clean
• Remove all untracked directories and files
– git clean -df
• Remove all files included file list in .gitignore
– g...
Reset
• Back to specified commit
– git reset commit
– Ex. git reset 1aj93u5
• Keep modification in working tree
– git rese...
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 ...
Branch• List local existing branches
– git branch
• List both local and remote branches
– git branch -a
• Create a new loc...
Change remote HEAD to point to
another branch
• In remote git repository folder
– git symbolic-ref HEAD refs/heads/branch_...
Rename remote branch
• Rename the branch in the local repository
– git branch -m old_branch new_branch
• Remove the remote...
Merge remote branch from local
commits
• git remote add remote_branch_name
remote_path
• git fetch remote_branch_name
• gi...
Build Git Mirror Repository
• This method needs implementation of password-less
SSH login.
• In git mirror site:
– git clo...
Add new branch for new codes to
exist remote repository
• In local new codes
– follow steps 1~4 on page 5
– rename default...
Git Web
• Install Git Web package
– sudo apt-get install gitweb
• Configure Git Web
– sudo vim /etc/gitweb.conf
– Root pat...
GUI tools for Ubuntu
• git cola
– sudo apt-get install git-cola
– commit, push, pull, diff, …
• gitk
– sudo apt-get instal...
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 ( 简体中文 ...
Upcoming SlideShare
Loading in …5
×

Basic git

447 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
447
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Basic git

  1. 1. Basic Git 2014/07/11 Casper Chen (USGI)
  2. 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. 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. 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. 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. 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. 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. 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. 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. 10. Three areas 10 Working directory Staging area Repository git addgit add git commitgit commit git checkoutgit checkout
  11. 11. Submit change to Local Repository • git add some_files_changed • git commit 11
  12. 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. 13. Remove, move, or rename file • Delete file – git rm file_name • Move or rename file – git mv file_org file_mod 13
  14. 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. 15. Clean • Remove all untracked directories and files – git clean -df • Remove all files included file list in .gitignore – git clean -x 15
  16. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  26. 26. git cola 26
  27. 27. gitk --all 27
  28. 28. tig • tig --all • tig status • tig 28
  29. 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

×