Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
初心者 Git 上手攻略
Cloud Computing-Based Services Design and Programming
Lucien Lee
First,letMeTellyouaStory…
2
work alone
3
不知不覺分裂增⽣生的報告
4
workwithothers
5
BYDropbox,right?
那些年,⼀一起撞牆的夥伴
6
惱羞成怒
Does it sounds
happened to you before?
8
AllYouNeeDis__________
9
Version Control
什麼是版本控制
• 儲存進度
• 讀取進度
• 管理不同記錄
極
簡
篇
什麼是版本控制
• 我們想要:
• 知道為什麼變更
• 知道什麼時候變更
• 知道變更了什麼
• 知道是誰變更的
• 切換到過去的進度
• 切換不同的版本
• 合併不同的版本
史
詩
篇
「不怕神一樣的對手,只怕豬一樣的隊友」
12
What to fear are not the God-like opponents but the goose-like teammates.
git:
Distributed Version Control Systems
13
‣ 安裝
‣ 設定
‣ 初始化
1. SET UP YOUR Git
安裝
Windows Mac
Homebrew
brew install githttp://msysgit.github.io/
git for windows
SourceTree
私
⼼心
建
議
https://help.github....
$ git config --global user.name <名字>	
$ git config --global user.email <email>	
$ git config --global color.ui true
17
設定身分
// under your project 	
$ git init
18
初始化
幫你在專案裡生成 git 所需檔案: .git
‣基礎概念
‣儲存流程
‣.gitignore
basic Git in Local
基礎概念
20
s tIworking directory staging area repository
你放在資料夾裡的檔案 暫存你想存檔的檔案們 檔案的前世今⽣生
藏在 .git 裡status 會告訴你
你本來就看得到
的資料夾結構
c...
$ git status	
On branch master	
nothing to commit, working directory clean	
21
檢視 git 的當前狀態
儲存流程
22
s tIworking directory staging area repository
stage files
commit把想儲存的紀錄加到暫存區裡
建⽴立⼀一個存檔記錄
// From working directory to staging area	
$ git add <檔案>	
!
// From staging area to working directory	
$ git reset HEAD <...
// commit to repo	
$ git commit <檔案>	
$ git commit -m “commit message”	
!
// get commit from repo to staging area	
$ git r...
Take a snapshot
• Commit 會在目前的狀
態,建立一個新的記錄
點,之後可以回復到過
去的紀錄點。
25
$ git log
26
git log
檢視過去提交的歷史紀錄,看看過去有哪些存檔
基礎概念-檔案狀態
27
s tIworking directory staging area repository
untracked
unmodified
modified
staged
add files
commit
edit files
st...
#Untracked files	
$ git add <檔案>	
#Changes not staged for commit	
$ git add <檔案>
28
git Add
git add 可以用於加入追蹤新檔案,也可用於加入
新修改...
$ git diff
29
git diff
讓你知道哪些檔案被修改,並且比較修改了什麼
內容
$ git rm <檔案>
30
git rm
刪除檔案,同時從 repo 的歷史紀錄移除
.gitignore
• 有些檔案永遠不想 add
• 編輯器的暫存檔
• C/C++ 的 binary 檔、物件檔
• 把你不想要被 add 的檔案,寫進 .gitignore
• 可以使⽤用 *,表⽰示全部檔案
• ⽤用正規表⽰示式的語法
$ git reset ——hard
32
情境⼩小幫⼿手
不⼩小⼼心把 code 弄壞了,我想全部重來,那要怎麼回到
上⼀一個存檔點的樣⼦子?
清除所有與最近一次 commit 不同的修改
$ git checkout —— <檔案>
33
情境⼩小幫⼿手
只有⼀一個檔案,想改回之前的狀態,要怎麼做?
將修改過的檔案回復到最近一次 commit 的狀態
‣遠端概念
‣設定連線
‣Push and Pull
git with remote repository
基礎概念
35
s tIworking directory staging area repository ytremote repository
基礎概念
36
s tIworking directory staging area repository
ytremote repository
s tIworking directory staging area repository
ss...
remote Repo service
• Cooperate with others, private used or open source
• Issue tracking, Wiki feature
• Over 5 people in...
SSH: Secure Shell
38
yt
1. 交換公鑰
o2. ⽤用公鑰加密要傳的訊息
3. 各⾃自⽤用私鑰解密

收到的訊息
每台電腦會有:
公鑰(public key)-⽤用於加密
私鑰(private key)-⽤用於解密
set up ssh key with gitgub
39
Reference: https://help.github.com/articles/generating-ssh-keys
$ cd ~/.ssh	
$ ls -al	
# Lists the files in your .ssh directory
40
Step 1: Check for SSH keys
檢查你有沒有 id_rsa.pub or id_dsa....
$ ssh-keygen -t rsa -C "your_email@example.com"	
# Creates a new ssh key, using the provided
email as a label
41
Step 2: G...
#mac	
$ pbcopy < ~/.ssh/id_rsa.pub 	
#windows	
$ clip < ~/.ssh/id_rsa.pub
42
Step 3: Add your SSH key to GitHub
複製你的公鑰的剪貼簿...
Step 3: Add your SSH key to GitHub
43
設定連線
44
t yt連結遠端 repo
現有 repo
t yt下載遠端 repo
remote repo
remote repo建⽴立repo
1.
2.
$ git remote add origin git@HOSTPATH
45
連結遠端 repo
設定你的本地 repo 跟遠端連結
在 github 建⽴立新 repo
46
$ git clone git@HOSTPATH:directory name
47
複製遠端 repo
從遠端複製一份 repo 回來,在當前的資料夾建
立新資料夾 <directory name>,並自動連結。
$ git remote -v
48
git remote
檢視你遠端 repo 的資訊
$ git remote add [shortname] [url]
49
git remote add
origin 是我們遠端 repo 常取的慣例名字
push and pull
50
t yt
push: 將本地版本推上遠端
pull: 從遠端拉回本地並且合併到本地端
$ git push origin master
51
git push
本地端預設(分支)叫做 master,我們把本地 master
推送到遠端
$ git pull origin master
52
git pull
‣分支概念
‣切換分支
‣合併分支
‣與他人合作
branch
Branch
54
• 建⽴立⼀一條新的歷史紀錄
• 多種版本獨⽴立開發
• 分⼯工合作時,幫助⼤大家
不會互相衝突。
• 最終可以合併在⼀一起
$ git branch <new branch>
55
git Branch
從當前分支上,新增一條名為 <new branch> 

的分支
What branch look like
• ⽣生成新 branch 時,並
不會切換到新 branch。
56
#list local branch	
$ git branch	
#list local and remote branch	
$ git branch -a 	
#delete the branch	
$ git branch -D <br...
$ git checkout <branch>
58
change your branch
$ git checkout -b <branch>
59
New and change branch simultaneously
What branch look like
60
Detached Head
• checkout 可以幫助你回到
到過去的 commit 版本
• 此時⾃自⼰己跟任何⼀一個
branch 都不⼀一樣
• Git 幫你暫時建⽴立的
branch
$ git log	
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7	
Author: Scott Chacon <schacon@gee-mail.com>	
Date: Sat Mar 15 ...
merge
63
merge
• 當兩個⼈人分別開發在不
同分⽀支時,最終會合併
為完整版。
• 改動不同檔案、同⼀一檔
案不同區域
• auto merge
• 改到同⼀一⾏行,GG。
• conflict
• ⼈人⼯工處理
64
$ git merge <branch>
65
合併分⽀支
把另外一支 <branch> 合併到自己身上來。
當發⽣生 conflict
• ⾸首先 git status ,了解狀況。
• 衝突的檔案會標⽰示兩個版本的資訊,⼿手動合併存檔
• git add 改好的檔案
• git commit
$ git status	
On branch master	
You have unmerged paths.	
(fix conflicts and run "git commit")	
!
Unmerged paths:	
(use "g...
<<<<<<< HEAD	
<div id="footer">contact :
email.support@github.com</div>	
=======	
<div id="footer">	
please contact us at
...
$ git commit -am “Merge bugFix”
69
最後⼿手動 commit
$ git reset --hard
70
情境⼩小幫⼿手
Merge 時發⽣生 conflict,想取消 merge
將修改過的檔案回復到最近一次 commit 的狀態
$ git checkout ——ours <file>	
$ git checkout ——theirs <file>
71
情境⼩小幫⼿手
Merge 時發⽣生 conflict,想把 conflict 的地⽅方,直接⽤用某
⽀支 branch...
多⼈人協作
72
git 合作⽅方式
• 有⼀一⽀支 branch 放完整可以動的程式,⽐比如說 master
或是 dev。
• 開發功能時,⼤大家從主線分⽀支出來,獨⽴立開發。
• 開發完後,合併回去主線。
• ⾃自⼰己的分⽀支⾃自⼰己合。
• 或是 git...
git flow
• http://nvie.com/
posts/a-successful-
git-branching-
model/
75
https://guides.github.com/introduction/flow/index.html
‣自動補齊
‣Git 命令別名
‣stash 暫存操作
appendix
#mac	
brew install git bash-completion	
#Ubuntu/Debian	
sudo apt-get install git-core bash-completion
77
⾃自動補⿑齊
在Bash shel...
$ git config --global alias.co checkout	
$ git config --global alias.br branch	
$ git config --global alias.ci commit	
$ g...
暫時儲存區 stash
• 不想提交當前完成了⼀一半的程式,但是卻不得不修改
⼀一個緊急 Bug
• 把⺫⽬目前⼯工作狀況丟到暫存區,這時候你的⼯工作區和上
次剛提交內容的狀況是⼀一樣,所以你可以放⼼心的修
Bug。
• 修完可以再把東⻄西叫回...
#將⺫⽬目前所做的修改都暫存起來	
$ git stash	
#取出最新⼀一次的暫存	
$ git stash apply	
#取出最新⼀一次的暫存並將他從暫存清單中移除	
$ git stash pop	
#清除所有暫存	
$ git sta...
CopyRight
• 仙劍奇俠傳
• https://octodex.github.com/
• http://pcottle.github.io/learnGitBranching/
• http://www.wei-wang.com/Ex...
初心者 Git 上手攻略
Upcoming SlideShare
Loading in …5
×

初心者 Git 上手攻略

19,644 views

Published on

Cloud Computing-Based Services Design and Programming 2014S

Git Tutorial For the Beginner

Published in: Education, Technology
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Hi there! Essay Help For Students | Discount 10% for your first order! - Check our website! https://vk.cc/80SakO
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Nice !! Download 100 % Free Ebooks, PPts, Study Notes, Novels, etc @ https://www.ThesisScientist.com
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Your class definitely has the most visually appealing presentations in all of Taida :D
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

初心者 Git 上手攻略

  1. 1. 初心者 Git 上手攻略 Cloud Computing-Based Services Design and Programming Lucien Lee
  2. 2. First,letMeTellyouaStory… 2
  3. 3. work alone 3
  4. 4. 不知不覺分裂增⽣生的報告 4
  5. 5. workwithothers 5 BYDropbox,right?
  6. 6. 那些年,⼀一起撞牆的夥伴 6
  7. 7. 惱羞成怒
  8. 8. Does it sounds happened to you before? 8
  9. 9. AllYouNeeDis__________ 9 Version Control
  10. 10. 什麼是版本控制 • 儲存進度 • 讀取進度 • 管理不同記錄 極 簡 篇
  11. 11. 什麼是版本控制 • 我們想要: • 知道為什麼變更 • 知道什麼時候變更 • 知道變更了什麼 • 知道是誰變更的 • 切換到過去的進度 • 切換不同的版本 • 合併不同的版本 史 詩 篇
  12. 12. 「不怕神一樣的對手,只怕豬一樣的隊友」 12 What to fear are not the God-like opponents but the goose-like teammates.
  13. 13. git: Distributed Version Control Systems 13
  14. 14. ‣ 安裝 ‣ 設定 ‣ 初始化 1. SET UP YOUR Git
  15. 15. 安裝 Windows Mac Homebrew brew install githttp://msysgit.github.io/ git for windows SourceTree 私 ⼼心 建 議 https://help.github.com/articles/set-up-git GUI 私 ⼼心 建 議 github app
  16. 16. $ git config --global user.name <名字> $ git config --global user.email <email> $ git config --global color.ui true 17 設定身分
  17. 17. // under your project $ git init 18 初始化 幫你在專案裡生成 git 所需檔案: .git
  18. 18. ‣基礎概念 ‣儲存流程 ‣.gitignore basic Git in Local
  19. 19. 基礎概念 20 s tIworking directory staging area repository 你放在資料夾裡的檔案 暫存你想存檔的檔案們 檔案的前世今⽣生 藏在 .git 裡status 會告訴你 你本來就看得到 的資料夾結構 commit 提交到儲存庫,你 可以想像成存檔
  20. 20. $ git status On branch master nothing to commit, working directory clean 21 檢視 git 的當前狀態
  21. 21. 儲存流程 22 s tIworking directory staging area repository stage files commit把想儲存的紀錄加到暫存區裡 建⽴立⼀一個存檔記錄
  22. 22. // From working directory to staging area $ git add <檔案> ! // From staging area to working directory $ git reset HEAD <檔案> 23 加到暫存區
  23. 23. // commit to repo $ git commit <檔案> $ git commit -m “commit message” ! // get commit from repo to staging area $ git reset ——soft HEAD^ 24 送進檔案庫
  24. 24. Take a snapshot • Commit 會在目前的狀 態,建立一個新的記錄 點,之後可以回復到過 去的紀錄點。 25
  25. 25. $ git log 26 git log 檢視過去提交的歷史紀錄,看看過去有哪些存檔
  26. 26. 基礎概念-檔案狀態 27 s tIworking directory staging area repository untracked unmodified modified staged add files commit edit files stage files
  27. 27. #Untracked files $ git add <檔案> #Changes not staged for commit $ git add <檔案> 28 git Add git add 可以用於加入追蹤新檔案,也可用於加入 新修改的檔案到暫存區。
  28. 28. $ git diff 29 git diff 讓你知道哪些檔案被修改,並且比較修改了什麼 內容
  29. 29. $ git rm <檔案> 30 git rm 刪除檔案,同時從 repo 的歷史紀錄移除
  30. 30. .gitignore • 有些檔案永遠不想 add • 編輯器的暫存檔 • C/C++ 的 binary 檔、物件檔 • 把你不想要被 add 的檔案,寫進 .gitignore • 可以使⽤用 *,表⽰示全部檔案 • ⽤用正規表⽰示式的語法
  31. 31. $ git reset ——hard 32 情境⼩小幫⼿手 不⼩小⼼心把 code 弄壞了,我想全部重來,那要怎麼回到 上⼀一個存檔點的樣⼦子? 清除所有與最近一次 commit 不同的修改
  32. 32. $ git checkout —— <檔案> 33 情境⼩小幫⼿手 只有⼀一個檔案,想改回之前的狀態,要怎麼做? 將修改過的檔案回復到最近一次 commit 的狀態
  33. 33. ‣遠端概念 ‣設定連線 ‣Push and Pull git with remote repository
  34. 34. 基礎概念 35 s tIworking directory staging area repository ytremote repository
  35. 35. 基礎概念 36 s tIworking directory staging area repository ytremote repository s tIworking directory staging area repository ssh 連線 public key 認證
  36. 36. remote Repo service • Cooperate with others, private used or open source • Issue tracking, Wiki feature • Over 5 people in a private repo will charge • In this course, we use github and open source
  37. 37. SSH: Secure Shell 38 yt 1. 交換公鑰 o2. ⽤用公鑰加密要傳的訊息 3. 各⾃自⽤用私鑰解密
 收到的訊息 每台電腦會有: 公鑰(public key)-⽤用於加密 私鑰(private key)-⽤用於解密
  38. 38. set up ssh key with gitgub 39 Reference: https://help.github.com/articles/generating-ssh-keys
  39. 39. $ cd ~/.ssh $ ls -al # Lists the files in your .ssh directory 40 Step 1: Check for SSH keys 檢查你有沒有 id_rsa.pub or id_dsa.pub
  40. 40. $ ssh-keygen -t rsa -C "your_email@example.com" # Creates a new ssh key, using the provided email as a label 41 Step 2: Generate a new SSH key 生成新的 ssh key,在你的 ~/.ssh/ 目錄底下
  41. 41. #mac $ pbcopy < ~/.ssh/id_rsa.pub #windows $ clip < ~/.ssh/id_rsa.pub 42 Step 3: Add your SSH key to GitHub 複製你的公鑰的剪貼簿,然後你再交給 Gitbub
  42. 42. Step 3: Add your SSH key to GitHub 43
  43. 43. 設定連線 44 t yt連結遠端 repo 現有 repo t yt下載遠端 repo remote repo remote repo建⽴立repo 1. 2.
  44. 44. $ git remote add origin git@HOSTPATH 45 連結遠端 repo 設定你的本地 repo 跟遠端連結
  45. 45. 在 github 建⽴立新 repo 46
  46. 46. $ git clone git@HOSTPATH:directory name 47 複製遠端 repo 從遠端複製一份 repo 回來,在當前的資料夾建 立新資料夾 <directory name>,並自動連結。
  47. 47. $ git remote -v 48 git remote 檢視你遠端 repo 的資訊
  48. 48. $ git remote add [shortname] [url] 49 git remote add origin 是我們遠端 repo 常取的慣例名字
  49. 49. push and pull 50 t yt push: 將本地版本推上遠端 pull: 從遠端拉回本地並且合併到本地端
  50. 50. $ git push origin master 51 git push 本地端預設(分支)叫做 master,我們把本地 master 推送到遠端
  51. 51. $ git pull origin master 52 git pull
  52. 52. ‣分支概念 ‣切換分支 ‣合併分支 ‣與他人合作 branch
  53. 53. Branch 54 • 建⽴立⼀一條新的歷史紀錄 • 多種版本獨⽴立開發 • 分⼯工合作時,幫助⼤大家 不會互相衝突。 • 最終可以合併在⼀一起
  54. 54. $ git branch <new branch> 55 git Branch 從當前分支上,新增一條名為 <new branch> 
 的分支
  55. 55. What branch look like • ⽣生成新 branch 時,並 不會切換到新 branch。 56
  56. 56. #list local branch $ git branch #list local and remote branch $ git branch -a #delete the branch $ git branch -D <branch> 57 Manipulate branch
  57. 57. $ git checkout <branch> 58 change your branch
  58. 58. $ git checkout -b <branch> 59 New and change branch simultaneously
  59. 59. What branch look like 60
  60. 60. Detached Head • checkout 可以幫助你回到 到過去的 commit 版本 • 此時⾃自⼰己跟任何⼀一個 branch 都不⼀一樣 • Git 幫你暫時建⽴立的 branch
  61. 61. $ git log commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 16:40:33 2008 -0700 ! removed unnecessary test code ! commit a11bef06a3f659402fe7563abf99ad00de2209e6 Author: Scott Chacon <schacon@gee-mail.com> Date: Sat Mar 15 10:31:28 2008 -0700 ! first commit $ git checkout a11bef0 62 checkout to past commit
  62. 62. merge 63
  63. 63. merge • 當兩個⼈人分別開發在不 同分⽀支時,最終會合併 為完整版。 • 改動不同檔案、同⼀一檔 案不同區域 • auto merge • 改到同⼀一⾏行,GG。 • conflict • ⼈人⼯工處理 64
  64. 64. $ git merge <branch> 65 合併分⽀支 把另外一支 <branch> 合併到自己身上來。
  65. 65. 當發⽣生 conflict • ⾸首先 git status ,了解狀況。 • 衝突的檔案會標⽰示兩個版本的資訊,⼿手動合併存檔 • git add 改好的檔案 • git commit
  66. 66. $ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") ! Unmerged paths: (use "git add <file>..." to mark resolution) ! both modified: index.html 67 conflict
  67. 67. <<<<<<< HEAD <div id="footer">contact : email.support@github.com</div> ======= <div id="footer"> please contact us at support@github.com </div> >>>>>>> bugFix 68 衝突的地⽅方會標⽰示出來
  68. 68. $ git commit -am “Merge bugFix” 69 最後⼿手動 commit
  69. 69. $ git reset --hard 70 情境⼩小幫⼿手 Merge 時發⽣生 conflict,想取消 merge 將修改過的檔案回復到最近一次 commit 的狀態
  70. 70. $ git checkout ——ours <file> $ git checkout ——theirs <file> 71 情境⼩小幫⼿手 Merge 時發⽣生 conflict,想把 conflict 的地⽅方,直接⽤用某 ⽀支 branch 的 ours 表示衝突部分使用目前分支的,theirs 則反 過來。
  71. 71. 多⼈人協作 72
  72. 72. git 合作⽅方式 • 有⼀一⽀支 branch 放完整可以動的程式,⽐比如說 master 或是 dev。 • 開發功能時,⼤大家從主線分⽀支出來,獨⽴立開發。 • 開發完後,合併回去主線。 • ⾃自⼰己的分⽀支⾃自⼰己合。 • 或是 git fetch origin ,把所有遠端分⽀支搬回家,再⾃自 ⼰己合併。 極 簡 篇
  73. 73. git flow • http://nvie.com/ posts/a-successful- git-branching- model/
  74. 74. 75 https://guides.github.com/introduction/flow/index.html
  75. 75. ‣自動補齊 ‣Git 命令別名 ‣stash 暫存操作 appendix
  76. 76. #mac brew install git bash-completion #Ubuntu/Debian sudo apt-get install git-core bash-completion 77 ⾃自動補⿑齊 在Bash shell 底下,自動幫你補完打到一半的 git 指令
  77. 77. $ git config --global alias.co checkout $ git config --global alias.br branch $ git config --global alias.ci commit $ git config --global alias.st status 78 命令別名 設定一些 git 縮寫,幫助自己指令打少一點
  78. 78. 暫時儲存區 stash • 不想提交當前完成了⼀一半的程式,但是卻不得不修改 ⼀一個緊急 Bug • 把⺫⽬目前⼯工作狀況丟到暫存區,這時候你的⼯工作區和上 次剛提交內容的狀況是⼀一樣,所以你可以放⼼心的修 Bug。 • 修完可以再把東⻄西叫回來。 • 有點像 stack 的暫存區。
  79. 79. #將⺫⽬目前所做的修改都暫存起來 $ git stash #取出最新⼀一次的暫存 $ git stash apply #取出最新⼀一次的暫存並將他從暫存清單中移除 $ git stash pop #清除所有暫存 $ git stash clear 80 git stash
  80. 80. CopyRight • 仙劍奇俠傳 • https://octodex.github.com/ • http://pcottle.github.io/learnGitBranching/ • http://www.wei-wang.com/ExplainGitWithD3/ • https://speakerdeck.com/mrorz/git-and-heroku- tutorial-at-ccsp-2012f

×