連哈秋都懂的git教學

87
哈秋都懂的Git教學 2015/10/04@HTCG hydai<[email protected]>

Upload: hydai

Post on 16-Apr-2017

628 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 連哈秋都懂的Git教學

連哈秋都懂的Git教學2015/10/04@HTCG

hydai<[email protected]>

Page 2: 連哈秋都懂的Git教學

投影⽚片授權• CC by-nc 3.0

• 你可以分享、改作

• 不能拿去做商業運⽤用喔!

• creativecommons.org/licenses/by-nc/3.0/tw/

Page 3: 連哈秋都懂的Git教學

哈秋是誰?

我實習公司的貓貓好萌好可愛喜歡⽤用側邊磨蹭好萌好可愛

會指揮貓奴跟他玩或進貢⻝⾷食物好萌好可愛hachu.cat

Page 4: 連哈秋都懂的Git教學

潛規則 DEMO 失敗要記得⿎鼓掌(X)

⼝口誤都是事先 set 好的(X)

廢話太多可以⽤用眼神打斷我(X)

歡迎多問問題(O)

Page 5: 連哈秋都懂的Git教學

先來做⼀一下調查

Page 6: 連哈秋都懂的Git教學

⽤用過 Git 的舉⼿手

Page 7: 連哈秋都懂的Git教學

聽過 Git 的舉⼿手

Page 8: 連哈秋都懂的Git教學

你有過這種經驗嗎?

Page 9: 連哈秋都懂的Git教學

⽼老師說:基礎功能完成以後,可以繼續做加分功能

Page 10: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 11: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 12: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 13: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 14: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 15: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 16: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 17: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 18: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 19: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 20: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 21: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 22: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 23: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 24: 連哈秋都懂的Git教學

來源:寫程式?那些⽼老師沒教的事

2012/07/15 @StudyArea-Taichung畢⽟玉泉 (⼩小畢/CrBoy) <[email protected]>

Page 25: 連哈秋都懂的Git教學

做 Project 的時候有時候就不是⼀一個檔案的事了

Page 26: 連哈秋都懂的Git教學

最初的資料夾

Page 27: 連哈秋都懂的Git教學

沒想到有 Bug 只好標⽰示⼀一下

Page 28: 連哈秋都懂的Git教學

解掉 Bug 了,複製⼀一份新的⽐比較安全

Page 29: 連哈秋都懂的Git教學

F**K ⼜又有 Bug 了,再來⼀一份

Page 30: 連哈秋都懂的Git教學

不⾏行,我忘記哪個是最新的了,加上版本號好了

Page 31: 連哈秋都懂的Git教學

版本越來越多

Page 32: 連哈秋都懂的Git教學

終於 Final 版出來了

Page 33: 連哈秋都懂的Git教學

有 Bug 我再繼續修

Page 34: 連哈秋都懂的Git教學

Final 後還有 Final… 有時候有更多的 Final…

Page 35: 連哈秋都懂的Git教學

做 Project 的時候有時候也不是⼀一個⼈人的事了吧(?)

Page 36: 連哈秋都懂的Git教學

多⼈人協作的時候怎麼辦?

Page 37: 連哈秋都懂的Git教學

A ⽅方案:我們各改各的,最後再來融合

Page 38: 連哈秋都懂的Git教學

功能融合不起來?!!!

Page 39: 連哈秋都懂的Git教學

功能融合不起來?!!!G_G

Page 40: 連哈秋都懂的Git教學

B ⽅方案:別怕,只要⽤用 Dropbox 同步我們就可以同時改⼀一份 Code

Page 41: 連哈秋都懂的Git教學

你他O的把我的 Code 蓋掉啦?!

Page 42: 連哈秋都懂的Git教學

你他O的把我的 Code 蓋掉啦?!G_G

Page 43: 連哈秋都懂的Git教學

所以我們想解決什麼?

Page 44: 連哈秋都懂的Git教學

⺫⽬目標 隨時可以回到純真年代,在 Code 被修改之前

協作時, Code 不會意外的被蓋掉

容易找戰犯 我是說可以查詢歷史紀錄

可以控管很多很多種版本(交作業⽤用、借⼈人抄⽤用)

Page 45: 連哈秋都懂的Git教學

版本控制系統因⽽而誕⽣生

Page 46: 連哈秋都懂的Git教學

Version Control System

Page 47: 連哈秋都懂的Git教學

Repository -> 數據庫,紀錄歷史的地⽅方

Local -> 本地端,通常個⼈人使⽤用的地⽅方

Remote -> 遠端,通常是⼀一個共⽤用的伺服器

在介紹前,先看看專有名詞

Page 48: 連哈秋都懂的Git教學

VCS ⼤大體可以分兩種

Page 49: 連哈秋都懂的Git教學

Centralised VCS

Repository

Server (remote)

Copy

User#1

Copy

User#2

commit

update commit

update

Page 50: 連哈秋都懂的Git教學

Distributed VCS

Repository

Server (remote)

Copy

User#1

Copy

User#2

Repository Repository

Push

Pull

Push

Pull

Update Commit Update Commit

Local Local

Page 51: 連哈秋都懂的Git教學

今天的主⾓角 - Git

Page 52: 連哈秋都懂的Git教學

Distributed VCS

Repository

Server (remote)

Copy

User#1

Copy

User#2

Repository Repository

Push

Pull

Push

Pull

Update Commit Update Commit

Local Local

Page 53: 連哈秋都懂的Git教學

⼤大概像是⼀一位歷史學家

Page 54: 連哈秋都懂的Git教學

git <command> [arguments]

git <command> --help 看到指令的提⽰示

⼀一招⾛走天下

Page 55: 連哈秋都懂的Git教學

切換到你想要做版本控制的地⽅方

打上 git init

這位歷史學家就會進駐囉!

建⽴立 Repository

Page 56: 連哈秋都懂的Git教學

當已經有歷史存在時,可以把過去的歷史繼承下來

git clone <url>

就可以把別⼈人的 repo 複製⼀一份下來囉

已經存在的 Repository

Page 57: 連哈秋都懂的Git教學

很安全的基礎指令 查看⺫⽬目前狀態: git status

查看歷史紀錄: git log

查看檔案差異: git diff

查看特定紀錄: git show

Page 58: 連哈秋都懂的Git教學

Git 寫歷史的流程

來源:http://git-scm.com/about/staging-area

當前的⼯工作環境

數據庫

準備進⼊入數據庫的階段

Page 59: 連哈秋都懂的Git教學

將修改放⼊入 Stage 階段

git add <file/folder>

git add -A #⼀一次加全部,但是要⼩小⼼心

Page 60: 連哈秋都懂的Git教學

將修改移出 Stage 階段

git rm --cached <file>

git rm -r --cached <folder>

Page 61: 連哈秋都懂的Git教學

將修改放⼊入 repository git commit -m "message"

適合 commit message 很短的時候

git commit -a

將打開互動式編輯器,寫上 commit message

存檔離開以後就完成啦!

Page 62: 連哈秋都懂的Git教學

commit message 錯誤範例

Page 63: 連哈秋都懂的Git教學

commit message 建議習慣

第⼀一⾏行是主題,盡量在五⼗十個字元內寫完

空⼀一⾏行

第三⾏行是細節,解釋更多資訊 盡量⼀一⾏行不要超過七⼗十⼆二的字元

Page 64: 連哈秋都懂的Git教學

Git 寫歷史的狀態

來源:https://ihower.tw/git/basic.html

Page 65: 連哈秋都懂的Git教學

不想被加進去的檔案 寫進去 .gitignore 的檔案中

通常我們不會把以下檔案放進去 repo 中

暫存檔案

個⼈人設定檔案

編譯產⽣生的檔案

很棒的 gitignore 整理:https://github.com/github/gitignore

Page 66: 連哈秋都懂的Git教學

今天的配⾓角 - GitHub

Page 67: 連哈秋都懂的Git教學

GitHub

章⿂魚貓可以存放 Git 的 repo

強⼤大的 issue tracking system⼀一⼤大堆開源軟體

學⽣生專案快去⽤用呀~~~education.github.com/pack

Page 68: 連哈秋都懂的Git教學

在 GitHub 上建⽴立 repo

Page 69: 連哈秋都懂的Git教學

git remote <sub-command>

git remote add <remote-name> <url>

設定 remote

Page 70: 連哈秋都懂的Git教學

git push <remote-name> <branch-name>

推上 remote 吧!

Page 71: 連哈秋都懂的Git教學

Push 的時候要注意

Page 72: 連哈秋都懂的Git教學

hint: Updates were rejected because the

tip of your current branch is behind

Push 失敗的訊息

Page 73: 連哈秋都懂的Git教學

這時候就⽤用等⼀一下要講的 Pull

Page 74: 連哈秋都懂的Git教學

絕對不要這麼做git push --force

Page 75: 連哈秋都懂的Git教學
Page 76: 連哈秋都懂的Git教學

git pull <remote-name> <branch-name>

pull 其實是 fetch + merge

所以會多出⼀一個點表⽰示與 remote 融合

git pull --rebase 則是會⽤用 rebase 取代 merge

git log 出來的圖會⽐比較好看

從 remote 把最新的版本拉下來吧

Page 77: 連哈秋都懂的Git教學

通常 pull 有機會遇到這個情況你跟朋友同時改了同個檔案然後就 conflict 了

Page 78: 連哈秋都懂的Git教學

如何解 conflict ?你可能會看到這個樣⼦子:

<<<<<<<<<<<<< HEAD

XXXXXXXX

=============

OOOOOOOO

>>>>>>>>>>>>> 8gh893sg897wgs897h

Page 79: 連哈秋都懂的Git教學

如何解 conflict ?想辦法合併以後就會變成這個樣⼦子:

XXOOXXXX

OOOXXXOO

存檔後就可以繼續 commit 了!

Page 80: 連哈秋都懂的Git教學

想要修改已經 commit 的東⻄西?

Page 81: 連哈秋都懂的Git教學

git rebase -i HEAD~X

從某個 commit 開始調整

有請歷史學家~

Page 82: 連哈秋都懂的Git教學

最後⽤用來傷感情的指令

Page 83: 連哈秋都懂的Git教學

git blame <file>

可以看到每⼀一⾏行是誰寫的,想賴都賴不掉

如何找戰犯

Page 84: 連哈秋都懂的Git教學

參考資料

Page 85: 連哈秋都懂的Git教學

初學⼊入⾨門專⽤用• 互動式學 Git

• try.github.io• 詳細教學⽂文+實例操作

• backlogtool.com/git-guide/tw/

• 三⼗十天學 Git 系列

• github.com/doggy8088/Learn-Git-in-30-days

Page 86: 連哈秋都懂的Git教學

參考資料• 寫程式?那些⽼老師沒教的事

• blog.crboy.net/2012/04/release-slides-of-code-smart.html

• ihower Git 教材

• ihower.tw/git/basic.html

• git-scm

• git-scm.com/about/staging-area

Page 87: 連哈秋都懂的Git教學

有趣的⼩小東⻄西

• git-fire!!!

• github.com/qw3rtman/git-fire