SlideShare uma empresa Scribd logo
1 de 246
Baixar para ler offline
Git 經驗分享
Kewang
2
基本指令
3
git checkout
移動到特定 <commit> ,不會更改現有
branch 的歷史
4
git reset
移動到特定 <commit> ,或許會更改現
有 branch 的歷史
5
git revert
還原特定 <commit> ,會增加新的歷史
6
git merge
合併兩個 branch ,並分為 fast-forward
或 true merge 兩種
7
git rebase
可以把特定 branch 接到另一個 branch
上面
8
git cherry-pick
將特定的 <commit> 合併到特定
branch 上面
9
git bisect
利用 binary search 的方式找到特定的
<commit>
10
git reflog
整個 repo 的所有 HEAD 切換記錄
11
git push
將本機的 branch 推到遠端機器
12
git pull
從遠端機器拉 branch 回本機並且合併
13
git fetch
從遠端機器拉 branch 回本機,但不做
合併
14
git blame
看檔案的每一行是誰做的最後變更
15
git diff
查看檔案或 <commit> 之間的變更內容
16
資料流
17
18
存取模型
19
分散式貢獻者模型
20
分散式貢獻者模型
● Git core 目前還在使用的模型
21
分散式貢獻者模型
● Git core 目前還在使用的模型
● 使用 diff 指令產生差異檔並寄送給相關開發者
22
分散式貢獻者模型
● Git core 目前還在使用的模型
● 使用 diff 指令產生差異檔並寄送給相關開發者
●
可以不需使用任何版本控制軟體
23
分散式貢獻者模型
● Git core 目前還在使用的模型
● 使用 diff 指令產生差異檔並寄送給相關開發者
●
可以不需使用任何版本控制軟體
●
鼓勵以完整的概念開發後再寄送差異檔
24
分散式貢獻者模型
● Git core 目前還在使用的模型
● 使用 diff 指令產生差異檔並寄送給相關開發者
●
可以不需使用任何版本控制軟體
●
鼓勵以完整的概念開發後再寄送差異檔
脫離現代軟體開發方式
25
分散式貢獻者模型
●
優點
●
缺點
26
分散式貢獻者模型
●
優點
– 強制 code review
●
缺點
27
分散式貢獻者模型
●
優點
– 強制 code review
●
缺點
– 分享成果變的很複雜
28
分散式貢獻者模型
●
優點
– 強制 code review
●
缺點
– 分享成果變的很複雜
– 貢獻者可能要自己設定程式碼代管系統
29
分散式貢獻者模型
●
優點
– 強制 code review
●
缺點
– 分享成果變的很複雜
– 貢獻者必須要自己設定程式碼代管系統
脫離現代軟體開發方式
30
分散式貢獻者模型
31
分散式貢獻者模型
脫離現代軟體開發方式
32
共處一地貢獻者模型
33
共處一地貢獻者模型
●
透過中央程式碼代管系統管理
34
共處一地貢獻者模型
●
透過中央程式碼代管系統管理
● 上游 (upstream) 專案擁有完整的控制權
35
共處一地貢獻者模型
●
透過中央程式碼代管系統管理
● 上游 (upstream) 專案擁有完整的控制權
● 貢獻者在代管系統建立專案複本 (fork)
36
共處一地貢獻者模型
●
透過中央程式碼代管系統管理
● 上游 (upstream) 專案擁有完整的控制權
● 貢獻者在代管系統建立專案複本 (fork)
● 貢獻者變更複本並以合併請求 (Pull Request /
Merge Request) 的形式送到上游專案
37
共處一地貢獻者模型
●
透過中央程式碼代管系統管理
● 上游 (upstream) 專案擁有完整的控制權
● 貢獻者在代管系統建立專案複本 (fork)
● 貢獻者變更複本並以合併請求 (Pull Request /
Merge Request) 的形式送到上游專案
● GitHub 為濫觴
38
共處一地貢獻者模型
●
透過中央程式碼代管系統管理
● 上游 (upstream) 專案擁有完整的控制權
● 貢獻者在代管系統建立專案複本 (fork)
● 貢獻者變更複本並以合併請求 (Pull Request /
Merge Request) 的形式送到上游專案
● GitHub 為濫觴
最流行的存取模型
39
共處一地貢獻者模型
●
優點
●
缺點
最流行的存取模型
40
共處一地貢獻者模型
●
優點
– 強制 code review
●
缺點
最流行的存取模型
41
共處一地貢獻者模型
●
優點
– 強制 code review
●
缺點
– 愈多的 <commit> 會造成除錯時的困難
最流行的存取模型
42
共處一地貢獻者模型
●
優點
– 強制 code review
●
缺點
– 愈多的 <commit> 會造成除錯時的困難
– 每個團體成員都會複製一個儲存庫
最流行的存取模型
43
共處一地貢獻者模型
●
優點
– 強制 code review
●
缺點
– 愈多的 <commit> 會造成除錯時的困難
– 每個團體成員都會複製一個儲存庫
– 合併一個新成果要多不少步驟
最流行的存取模型
44
共處一地貢獻者模型
最流行的存取模型
45
共享維護模型
46
共享維護模型
●
一個共享的儲存庫,所有人都擁有寫入權限
47
共享維護模型
●
一個共享的儲存庫,所有人都擁有寫入權限
●
團隊成員彼此要有互信基礎
48
共享維護模型
●
一個共享的儲存庫,所有人都擁有寫入權限
●
團隊成員彼此要有互信基礎
●
所有開發者都在本機工作,完成後再將成果推送
到儲存庫
49
共享維護模型
●
一個共享的儲存庫,所有人都擁有寫入權限
●
團隊成員彼此要有互信基礎
●
所有開發者都在本機工作,完成後再將成果推送
到儲存庫
一開始的存取模型
50
共享維護模型
●
優點
●
缺點
一開始的存取模型
51
共享維護模型
●
優點
– 鼓勵清楚的 master branch
●
缺點
一開始的存取模型
52
共享維護模型
●
優點
– 鼓勵清楚的 master branch
●
缺點
– 鼓勵但不強制大家 code review
一開始的存取模型
53
共享維護模型
●
優點
– 鼓勵清楚的 master branch
●
缺點
– 鼓勵但不強制大家 code review
– 必須給所有開發者有寫入的權限
一開始的存取模型
54
共享維護模型
一開始的存取模型
55
分支策略
56
主線開發
57
主線開發
58
主線開發
59
主線開發
●
最容易理解、最簡單
60
主線開發
●
最容易理解、最簡單
●
所有開發者持續將成果合併到單一分支
61
主線開發
●
最容易理解、最簡單
●
所有開發者持續將成果合併到單一分支
●
維持分支能夠部署的狀態,不應該發生問題
62
主線搭配分支開發
63
主線搭配分支開發
64
主線搭配分支開發
65
主線搭配分支開發
●
專案變大後的必經之路
66
主線搭配分支開發
●
專案變大後的必經之路
●
工作變多:依照工作項目開分支
67
主線搭配分支開發
●
專案變大後的必經之路
●
工作變多:依照工作項目開分支
●
開發者變多:依照開發者開分支
68
主線搭配分支開發
●
專案變大後的必經之路
●
工作變多:依照工作項目開分支
●
開發者變多:依照開發者開分支
●
有成果後就把分支合併進主線
69
主線搭配分支開發
●
專案變大後的必經之路
●
工作變多:依照工作項目開分支
●
開發者變多:依照開發者開分支
●
有成果後就把分支合併進主線
●
主線使用持續部署的方式交付整合後的成果
70
優點
71
優點
●
在專案內不會有過多的分支出現,減少找不到變
更的困擾
72
優點
●
在專案內不會有過多的分支出現,減少找不到變
更的困擾
●
程式變更記錄小,當出現問題時較容易找出問題
73
優點
●
在專案內不會有過多的分支出現,減少找不到變
更的困擾
●
程式變更記錄小,當出現問題時較容易找出問題
●
主線已可供部署,較不會發生上線後緊急修正
74
缺點
75
缺點
●
若沒有測試基礎設施,當合併至主線後發生錯誤
的機率就會變高
76
缺點
●
若沒有測試基礎設施,當合併至主線後發生錯誤
的機率就會變高
●
持續部署的次數頻繁,所以較適合在使用者自動
更新軟體的情境
77
一功能一分支
78
一功能一分支
79
一功能一分支
80
一功能一分支
● 又稱 Dymitruk Model
81
一功能一分支
● 又稱 Dymitruk Model
● 新工作都開新分支 (feature branch) 出來開發,儘
量讓分支不要太大
82
一功能一分支
● 又稱 Dymitruk Model
● 新工作都開新分支 (feature branch) 出來開發,儘
量讓分支不要太大
● 功能完成後合併到整合分支 (integration branch)
83
一功能一分支
● 又稱 Dymitruk Model
● 新工作都開新分支 (feature branch) 出來開發,儘
量讓分支不要太大
● 功能完成後合併到整合分支 (integration branch)
●
建置主管可選擇要合併到整合分支的功能有哪些
84
一功能一分支
● 又稱 Dymitruk Model
● 新工作都開新分支 (feature branch) 出來開發,儘
量讓分支不要太大
● 功能完成後合併到整合分支 (integration branch)
●
建置主管可選擇要合併到整合分支的功能有哪些
●
整合分支測試完後再合併到主線
85
優點
86
優點
●
類似主線開發,可以快速部署
87
優點
●
類似主線開發,可以快速部署
●
建置時可以選擇哪些分支應該合併進主線
88
缺點
89
缺點
●
功能分支完成卻沒有立刻合併到主線時,會花費
額外心力維持功能分支與主線的程式碼一致
90
缺點
●
功能分支完成卻沒有立刻合併到主線時,會花費
額外心力維持功能分支與主線的程式碼一致
●
功能分支命名原則會成為團隊內的語言,若同時
有許多功能則會提高菜鳥加入的門檻
91
缺點
●
功能分支完成卻沒有立刻合併到主線時,會花費
額外心力維持功能分支與主線的程式碼一致
●
功能分支命名原則會成為團隊內的語言,若同時
有許多功能則會提高菜鳥加入的門檻
●
當功能分支合併進主線後,開發者必須刪除功能
分支,會多一些額外工作
92
GitHub Flow
93
GitHub Flow
94
GitHub Flow
●
所有主線的內容都可以被部署
95
GitHub Flow
●
所有主線的內容都可以被部署
● 新工作都開新功能分支 (feature branch) 出來開發
96
GitHub Flow
●
所有主線的內容都可以被部署
● 新工作都開新功能分支 (feature branch) 出來開發
●
功能分支會持續合併來自主線的內容
97
GitHub Flow
●
所有主線的內容都可以被部署
● 新工作都開新功能分支 (feature branch) 出來開發
●
功能分支會持續合併來自主線的內容
● 當功能分支完成時,對主線發出拉取請求 (Pull
Request, PR)
98
Dymitruk Model vs GitHub Flow
99
Dymitruk Model vs GitHub Flow
● Dymitruk Model :建置時要明確選擇所需要的功
能分支合併到整合分支,然後再合併至主線
100
Dymitruk Model vs GitHub Flow
● Dymitruk Model :建置時要明確選擇所需要的功
能分支合併到整合分支,然後再合併至主線
● GitHub Flow :當 PR 接受後就馬上合併至主線,
較類似主線開發
101
GitLab Flow
102
GitLab Flow
103
GitLab Flow
104
GitLab Flow
● 導入位置 (location) 的概念
105
GitLab Flow
● 導入位置 (location) 的概念
●
透過分支命名的慣例表示目前程式碼的環境
106
GitLab Flow
● 導入位置 (location) 的概念
●
透過分支命名的慣例表示目前程式碼的環境
● 個別分支部署到個別的環境內,如: dev,staging,
production
107
GitLab Flow
● 導入位置 (location) 的概念
●
透過分支命名的慣例表示目前程式碼的環境
● 個別分支部署到個別的環境內,如: dev,staging,
production
● 應該使用語意化版本 (SemVer)
108
gitworkflows (Git 團隊本身使用 )
109
gitworkflows (Git 團隊本身使用 )
● maint :最新穩定版的 Git 及發佈時所有的記錄
110
gitworkflows (Git 團隊本身使用 )
● maint :最新穩定版的 Git 及發佈時所有的記錄
● master :應該進入下一次發佈的記錄
111
gitworkflows (Git 團隊本身使用 )
● maint :最新穩定版的 Git 及發佈時所有的記錄
● master :應該進入下一次發佈的記錄
● next :實驗一些評估中的功能,會影響 master
的穩定性
112
gitworkflows (Git 團隊本身使用 )
● maint :最新穩定版的 Git 及發佈時所有的記錄
● master :應該進入下一次發佈的記錄
● next :實驗一些評估中的功能,會影響 master
的穩定性
● pu :提議更新,包含目前還不適合發行的記錄
113
gitworkflows (Git 團隊本身使用 )
● maint :最新穩定版的 Git 及發佈時所有的記錄
● master :應該進入下一次發佈的記錄
● next :實驗一些評估中的功能,會影響 master
的穩定性
● pu :提議更新,包含目前還不適合發行的記錄
●
每個較低分支都包含一些不在較高分支的記錄
114
GitLab Flow & gitworkflows - 優點
115
GitLab Flow & gitworkflows - 優點
●
分支名稱符合情境脈絡
116
GitLab Flow & gitworkflows - 優點
●
分支名稱符合情境脈絡
●
不需猜測分支的作用,在合併進度時更易使用正
確的分支
117
GitLab Flow & gitworkflows - 缺點
118
GitLab Flow & gitworkflows - 缺點
●
必須要有指南才能知道該從哪個分支開始
119
GitLab Flow & gitworkflows - 缺點
●
必須要有指南才能知道該從哪個分支開始
●
分支名稱與團隊情境有緊密關係,很難在不同專
案建立一致的結構
120
GitFlow
121
122
優點
123
優點
●
不需在初期就建立全面的測試基礎設施
124
優點
●
不需在初期就建立全面的測試基礎設施
●
遵守相同慣例就能判斷工作時所應該使用的分支
125
優點
●
不需在初期就建立全面的測試基礎設施
●
遵守相同慣例就能判斷工作時所應該使用的分支
●
適合需要分版本的軟體
126
缺點
127
缺點
●
對於不熟悉產品開發各階段的菜鳥來說,會有很
高的負擔
128
缺點
●
對於不熟悉產品開發各階段的菜鳥來說,會有很
高的負擔
●
用錯分支必須花上很大的力氣才能將所有回復
129
缺點
●
對於不熟悉產品開發各階段的菜鳥來說,會有很
高的負擔
●
用錯分支必須花上很大的力氣才能將所有回復
●
無法持續部署
130
GitLab 專案可視度
131
專案可視度
132
專案可視度
● Private :必須明確指定使用者權限
133
專案可視度
● Private :必須明確指定使用者權限
● Internal :能登入 GitLab 就能 clone 專案
134
專案可視度
● Private :必須明確指定使用者權限
● Internal :能登入 GitLab 就能 clone 專案
● Public :不需要認證就能 clone 專案
135
專案可視度
● Private :必須明確指定使用者權限
● Internal :能登入 GitLab 就能 clone 專案
● Public :不需要認證就能 clone 專案
預設由 Admin 決定
136
我的建議
137
我的建議
● Private :適合需要權限控制嚴謹的專案
138
我的建議
● Private :適合需要權限控制嚴謹的專案
● Internal :使用 fork 及 MR 讓可受限制的開發者
( 同部門不同專案、同公司不同部門 ) 協同開發
139
我的建議
● Private :適合需要權限控制嚴謹的專案
● Internal :使用 fork 及 MR 讓可受限制的開發者
( 同部門不同專案、同公司不同部門 ) 協同開發
● Public :使用 fork 及 MR 讓外部開發者協同開發
140
GitLab 權限使用情境
141
權限等級
142
權限等級
● Owner :專案建立者,如部門經理、變更專案能
見度、移除專案
143
權限等級
● Owner :專案建立者,如部門經理、變更專案能
見度、移除專案
● Master :專案執行者最高等級,如小組長、可建
立專案、可建立里程碑、可操作受保護的
branch 、可建立環境變數、可建立 trigger
144
權限等級
● Owner :專案建立者,如部門經理、變更專案能
見度、移除專案
● Master :專案執行者最高等級,如小組長、可建
立專案、可建立里程碑、可操作受保護的
branch 、可建立環境變數、可建立 trigger
● Developer :一般開發者、可建立 MR 、可建立
branch 、可操作不受保護的 branch 、可新增
tag 、可建立 wiki
145
權限等級
● Owner :專案建立者,如部門經理、變更專案能
見度、移除專案
● Master :專案執行者最高等級,如小組長、可建
立專案、可建立里程碑、可操作受保護的
branch 、可建立環境變數、可建立 trigger
● Developer :一般開發者、可建立 MR 、可建立
branch 、可操作不受保護的 branch 、可新增
tag 、可建立 wiki
● Reporter :回報者、可取得所有程式碼
146
權限等級
● Owner :專案建立者,如部門經理、變更專案能見
度、移除專案
●
Master :專案執行者最高等級,如小組長、可建立專
案、可建立里程碑、可操作受保護的 branch 、可建立
環境變數、可建立 trigger
● Developer :一般開發者、可建立 MR 、可建立
branch 、可操作不受保護的 branch 、可新增 tag 、可
建立 wiki
●
Reporter :回報者、可取得所有程式碼
● Guest :訪客、可建立 issue 、可留言、觀看 build
log 、下載 build 完的產生物
147
Git for Teams 的建議
148
Git for Teams 的建議
● Owner :適合不屬於團隊的管理人員
149
Git for Teams 的建議
● Owner :適合不屬於團隊的管理人員
● Master :適合專案領導者及聰明的專案管理人
員,可能會需要隨時間調整團隊組成及權限
150
Git for Teams 的建議
● Owner :適合不屬於團隊的管理人員
● Master :適合專案領導者及聰明的專案管理人
員,可能會需要隨時間調整團隊組成及權限
● Developer :團隊中的大多數成員,可以限制個
別成員對特定 branch 的存取
151
Git for Teams 的建議
● Owner :適合不屬於團隊的管理人員
● Master :適合專案領導者及聰明的專案管理人
員,可能會需要隨時間調整團隊組成及權限
● Developer :團隊中的大多數成員,可以限制個
別成員對特定 branch 的存取
● Reporter : CTO ,因為不太會直接寫程式碼
152
Git for Teams 的建議
● Owner :適合不屬於團隊的管理人員
● Master :適合專案領導者及聰明的專案管理人
員,可能會需要隨時間調整團隊組成及權限
● Developer :團隊中的大多數成員,可以限制個
別成員對特定 branch 的存取
● Reporter : CTO ,因為不太會直接寫程式碼
● Guest :適合給利害關係人 (stakeholder) ,不需
存取程式碼,但應該參與專案開發
153
外包使用情境
154
使用方式
155
使用方式
●
有內部開發者及外部開發者,但不希望外部開發
者輕易動到程式碼時
156
使用方式
●
有內部開發者及外部開發者,但不希望外部開發
者輕易動到程式碼時
● 開啟 fork 功能,讓外部開發者自己 fork 回去,開
發完時用 PR(MR) 的方式合併回 upstream
157
使用方式
●
有內部開發者及外部開發者,但不希望外部開發
者輕易動到程式碼時
● 開啟 fork 功能,讓外部開發者自己 fork 回去,開
發完時用 PR(MR) 的方式合併回 upstream
● 可以做 code review
158
使用方式
●
有內部開發者及外部開發者,但不希望外部開發
者輕易動到程式碼時
● 開啟 fork 功能,讓外部開發者自己 fork 回去,開
發完時用 PR(MR) 的方式合併回 upstream
● 可以做 code review
●
到職的新人可以用相同方式避免弄髒原程式碼
159
遇到的問題
160
遇到的問題
● 外部開發者的儲存庫不是 fork 的,無法接觸
upstream
161
SemVer
Semantic Versioning
162
版本格式:主版號 . 次版號 . 修訂號
163
版本格式:主版號 . 次版號 . 修訂號
● 主版號:當你做了不相容的 API 修改
164
版本格式:主版號 . 次版號 . 修訂號
● 主版號:當你做了不相容的 API 修改
●
次版號:當你做了向下相容的功能性新增
165
版本格式:主版號 . 次版號 . 修訂號
● 主版號:當你做了不相容的 API 修改
●
次版號:當你做了向下相容的功能性新增
●
修訂號:當你做了向下相容的問題修正
166
版本格式:主版號 . 次版號 . 修訂號
● 主版號:當你做了不相容的 API 修改
●
次版號:當你做了向下相容的功能性新增
●
修訂號:當你做了向下相容的問題修正
● 先行版號及版本編譯資訊可以加到「主版號 . 次
版號 . 修訂號」的後面,作為延伸
167
版本格式:主版號 . 次版號 . 修訂號
● 主版號:當你做了不相容的 API 修改
●
次版號:當你做了向下相容的功能性新增
●
修訂號:當你做了向下相容的問題修正
● 先行版號及版本編譯資訊可以加到「主版號 . 次
版號 . 修訂號」的後面,作為延伸
● 以 0.1.0 作為你的初始化開發版本,並在後續的
每次發行時遞增次版號
168
版本格式:主版號 . 次版號 . 修訂號
● 主版號:當你做了不相容的 API 修改
●
次版號:當你做了向下相容的功能性新增
●
修訂號:當你做了向下相容的問題修正
● 先行版號及版本編譯資訊可以加到「主版號 . 次版號 .
修訂號」的後面,作為延伸
● 以 0.1.0 作為你的初始化開發版本,並在後續的每次發
行時遞增次版號
● 1.0.0 版的定義:你的軟體被用於正式環境、有個穩定
的 API 被使用者依賴、擔心向下相容的問題
169
各軟體生態系
● Java : Maven
● Node.js : npm
● Ruby : gem
● PHP : composer
● Python : pip
●
…… 等
170
Rebase or Merge
171
172
cherry-pick
173
使用方式
● git cherry-pick <commit>
● git cherry-pick -e <commit>
● git cherry-pick -n <commit>
174
使用方式
● git cherry-pick <commit>
– 通常是在 production 修正 bug 後,把同一個 bug 也在
dev 修復
● git cherry-pick -e <commit>
● git cherry-pick -n <commit>
175
使用方式
● git cherry-pick <commit>
– 通常是在 production 修正 bug 後,把同一個 bug 也在
dev 修復
● git cherry-pick -e <commit>
– 在 cherry-pick 前先編輯 commit message
● git cherry-pick -n <commit>
176
使用方式
● git cherry-pick <commit>
– 通常是在 production 修正 bug 後,把同一個 bug 也在
dev 修復
● git cherry-pick -e <commit>
– 在 cherry-pick 前先編輯 commit message
– 可以搭配 mention 功能,將某個 issue 關閉
● git cherry-pick -n <commit>
177
使用方式
● git cherry-pick <commit>
– 通常是在 production 修正 bug 後,把同一個 bug 也在
dev 修復
● git cherry-pick -e <commit>
– 在 cherry-pick 前先編輯 commit message
– 可以搭配 mention 功能,將某個 issue 關閉
● git cherry-pick -n <commit>
– cherry-pick 時先不 commit ,而是放到 index 裡面一次
commit
178
使用方式
●
git cherry-pick <commit>
– 通常是在 production 修正 bug 後,把同一個 bug 也在 dev
修復
● git cherry-pick -e <commit>
– 在 cherry-pick 前先編輯 commit message
– 可以搭配 mention 功能,將某個 issue 關閉
●
git cherry-pick -n <commit>
– cherry-pick 時先不 commit ,而是放到 index 裡面一次
commit
– 通常用在大範圍的 cherry-pick 上面,類似 squash
179
用 git 找 bug
180
使用 bisect
181
使用 bisect
● 當某個 bug 出現,但卻無法得知是哪個
<commit> 造成時的好用工具
182
使用 bisect
● 當某個 bug 出現,但卻無法得知是哪個
<commit> 造成時的好用工具
●
開發習慣必須良好,每完成一個小段落並且可以
編譯成功就馬上 commit ,而不是一次完成很大
的功能才 commit
183
還原某次的變更
184
還沒 commit
185
還沒 commit
186
已經 commit
187
已經 commit
188
還原某次的合併
189
使用情境
190
使用情境
● 本來要用 rebase ,可是卻用錯指令變成 merge
191
使用情境
● 本來要用 rebase ,可是卻用錯指令變成 merge
● 本來要合併到分支 A ,可是卻合併到分支 B
192
使用情境
● 本來要用 rebase ,可是卻用錯指令變成 merge
● 本來要合併到分支 A ,可是卻合併到分支 B
●
本來已經準備要發佈新版本,並且合併到主線
了。但發現新版本還沒準備好,所以要取消發佈
193
還沒 push
194
還沒 push
195
已經 push
196
已經 push
197
合併衝突原因
198
原因
199
原因
● coding style ,如空白、 TAB 、括號、換行 ...... 等
200
原因
● coding style ,如空白、 TAB 、括號、換行 ...... 等
– 團隊內部最好制定 coding style ,如: EditorConfig
201
原因
● coding style ,如空白、 TAB 、括號、換行 ...... 等
– 團隊內部最好制定 coding style ,如: EditorConfig
●
兩個使用者改到同一個檔案的同一行
202
原因
● coding style ,如空白、 TAB 、括號、換行 ...... 等
– 團隊內部最好制定 coding style ,如: EditorConfig
●
兩個使用者改到同一個檔案的同一行
– 模組化
203
原因
● coding style ,如空白、 TAB 、括號、換行 ...... 等
– 團隊內部最好制定 coding style ,如: EditorConfig
●
兩個使用者改到同一個檔案的同一行
– 模組化
●
一個使用者改檔案,另一個使用者卻把檔案刪掉
204
原因
● coding style ,如空白、 TAB 、括號、換行 ...... 等
– 團隊內部最好制定 coding style ,如: EditorConfig
●
兩個使用者改到同一個檔案的同一行
– 模組化
●
一個使用者改檔案,另一個使用者卻把檔案刪掉
– 模組化
205
與 Redmine 整合
206
使用方式
207
使用方式
● 每個工作都詳實紀錄在 Redmine 上面
208
使用方式
● 每個工作都詳實紀錄在 Redmine 上面
● 開 branch 時依照 issue number 建立,如
feature/145-add-oauth 、 bug/286-login-fail
209
使用方式
● 每個工作都詳實紀錄在 Redmine 上面
● 開 branch 時依照 issue number 建立,如
feature/145-add-oauth 、 bug/286-login-fail
● issue 處理完畢後,合併到其他 branch 建議使用
true merge 方式處理,在線圖上會清楚表現出來
210
使用方式
● 每個工作都詳實紀錄在 Redmine 上面
● 開 branch 時依照 issue number 建立,如
feature/145-add-oauth 、 bug/286-login-fail
● issue 處理完畢後,合併到其他 branch 建議使用
true merge 方式處理,在線圖上會清楚表現出來
● issue 處理完畢時,可以加上 GitHub 的方式直
接關閉 issue
211
使用方式
● 每個工作都詳實紀錄在 Redmine 上面
● 開 branch 時依照 issue number 建立,如
feature/145-add-oauth 、 bug/286-login-fail
● issue 處理完畢後,合併到其他 branch 建議使用
true merge 方式處理,在線圖上會清楚表現出來
● issue 處理完畢時,可以加上 GitHub 的方式直接
關閉 issue
● 使用 tj/git-extras
212
遇到的問題
213
遇到的問題
● 沒有每個工作都記錄在 Redmine 上
214
遇到的問題
● 沒有每個工作都記錄在 Redmine 上
● 不知道開 sub-issue 的時機
215
遇到的問題
● 沒有每個工作都記錄在 Redmine 上
● 不知道開 sub-issue 的時機
● 沒有按照 name convention 開 branch
216
遇到的問題
● 沒有每個工作都記錄在 Redmine 上
● 不知道開 sub-issue 的時機
● 沒有按照 name convention 開 branch
● 不知道要使用 merge 還是 rebase
217
不想所有檔案被控管
218
使用 .gitignore
219
使用 .gitignore
● 定義不需要被 git 控管的檔案規則
220
使用 .gitignore
● 定義不需要被 git 控管的檔案規則
● 暫存檔、建置完的 binary 檔,一般來說是不需被
git 控管
221
使用 .gitignore
● 定義不需要被 git 控管的檔案規則
● 暫存檔、建置完的 binary 檔,一般來說是不需被
git 控管
● 密碼、 token 等各種敏感資料需依照實際情況決
定,如透過 env 取得
222
使用 .gitignore
● 定義不需要被 git 控管的檔案規則
● 暫存檔、建置完的 binary 檔,一般來說是不需被
git 控管
● 密碼、 token 等各種敏感資料需依照實際情況決
定,如透過 env 取得
– 可多利用 framework 已內建的環境切換功能
223
使用 .gitignore
● 定義不需要被 git 控管的檔案規則
● 暫存檔、建置完的 binary 檔,一般來說是不需被
git 控管
● 密碼、 token 等各種敏感資料需依照實際情況決
定,如透過 env 取得
– 可多利用 framework 已內建的環境切換功能
● https://www.gitignore.io
224
使用 .gitignore
● 定義不需要被 git 控管的檔案規則
● 暫存檔、建置完的 binary 檔,一般來說是不需被
git 控管
● 密碼、 token 等各種敏感資料需依照實際情況決
定,如透過 env 取得
– 可多利用 framework 已內建的環境切換功能
● https://www.gitignore.io
– 內建數十種語言、 OS 及 framework
225
遇到的問題
226
遇到的問題
●
開發後期才發現有不該被控管的檔案如何處理?
227
遇到的問題
●
開發後期才發現有不該被控管的檔案如何處理?
– 使用 BFG 或 filter-branch 將資料清除
228
儲存庫大掃除
229
使用 BFG 或 filter-branch
230
使用 BFG 或 filter-branch
●
刪除某些特大檔
231
使用 BFG 或 filter-branch
●
刪除某些特大檔
– git 對於 binary 檔案不會使用 delta 的方式儲存,而是
直接新增 binary 檔案。所以如果儲存庫過大的話,可
以考慮刪除某些特大檔的歷史,如圖檔
232
使用 BFG 或 filter-branch
●
刪除某些特大檔
– git 對於 binary 檔案不會使用 delta 的方式儲存,而是
直接新增 binary 檔案。所以如果儲存庫過大的話,可
以考慮刪除某些特大檔的歷史,如圖檔
●
刪除某些檔案
233
使用 BFG 或 filter-branch
●
刪除某些特大檔
– git 對於 binary 檔案不會使用 delta 的方式儲存,而是
直接新增 binary 檔案。所以如果儲存庫過大的話,可
以考慮刪除某些特大檔的歷史,如圖檔
●
刪除某些檔案
– 不小心 commit 進儲存庫的檔案,如暫存檔、建置完
的檔案
234
使用 BFG 或 filter-branch
●
刪除某些特大檔
– git 對於 binary 檔案不會使用 delta 的方式儲存,而是
直接新增 binary 檔案。所以如果儲存庫過大的話,可
以考慮刪除某些特大檔的歷史,如圖檔
●
刪除某些檔案
– 不小心 commit 進儲存庫的檔案,如暫存檔、建置完
的檔案
●
取代字串,如密碼
235
使用 BFG 或 filter-branch
●
刪除某些特大檔
– git 對於 binary 檔案不會使用 delta 的方式儲存,而是
直接新增 binary 檔案。所以如果儲存庫過大的話,可
以考慮刪除某些特大檔的歷史,如圖檔
●
刪除某些檔案
– 不小心 commit 進儲存庫的檔案,如暫存檔、建置完
的檔案
●
取代字串,如密碼
– 敏感資料不想公開出來
236
遇到的問題
237
遇到的問題
● 大掃除後無法 push
238
遇到的問題
● 大掃除後無法 push
– 必須使用 push -f 的方式,強制更新遠端的儲存庫
239
遇到的問題
● 大掃除後無法 push
– 必須使用 push -f 的方式,強制更新遠端的儲存庫
– 大掃除前先請所有開發者將本地所有分支都 push 到
遠端儲存庫,執行大掃除後再重新 clone 下來,保持
儲存庫的整潔及完整性
240
遇到的問題
● 大掃除後無法 push
– 必須使用 push -f 的方式,強制更新遠端的儲存庫
– 大掃除前先請所有開發者將本地所有分支都 push 到
遠端儲存庫,執行大掃除後再重新 clone 下來,保持
儲存庫的整潔及完整性
●
敏感資料已經外流
241
遇到的問題
● 大掃除後無法 push
– 必須使用 push -f 的方式,強制更新遠端的儲存庫
– 大掃除前先請所有開發者將本地所有分支都 push 到
遠端儲存庫,執行大掃除後再重新 clone 下來,保持
儲存庫的整潔及完整性
●
敏感資料已經外流
– 變更密碼、撤銷 api key ,並確認後續使用 env 取得
242
Git for Teams
243
244
References
● Git for Teams
● A successful Git branching model
● BFG Repo-Cleaner
● The Dymitruk Model
● GitLab Flow
● GitHub Flow
● MitakeTW@GitHub
245
References
●
工程團隊如何做專案與程式碼管理 (二)
●
工程團隊如何做專案與程式碼管理 (三)
246

Mais conteúdo relacionado

Mais procurados

A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Will Huang
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan Tsai
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub維佋 唐
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學Duncan Chen
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學littlebtc
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用Will Huang
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作奕浦 郭
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局Anna Su
 
git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學Doremi Lin
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略Lucien Lee
 
Git & git flow
Git & git flowGit & git flow
Git & git flowAmo Wu
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學hydai
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)flylon
 

Mais procurados (20)

A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - Git
 
Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTree
 
Git 版本控制 (使用教學)
Git 版本控制 (使用教學)Git 版本控制 (使用教學)
Git 版本控制 (使用教學)
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局
 
Git由超淺入超深
Git由超淺入超深Git由超淺入超深
Git由超淺入超深
 
git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學git, repo, Gerrit 基礎教學
git, repo, Gerrit 基礎教學
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
Gitlab
GitlabGitlab
Gitlab
 
Git & git flow
Git & git flowGit & git flow
Git & git flow
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 
Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
 

Destaque

用JavaScript 實踐《軟體工程》的那些事兒!
用JavaScript  實踐《軟體工程》的那些事兒!用JavaScript  實踐《軟體工程》的那些事兒!
用JavaScript 實踐《軟體工程》的那些事兒!鍾誠 陳鍾誠
 
Git - a powerful version control tool
Git - a powerful version control toolGit - a powerful version control tool
Git - a powerful version control toolKuo-Le Mei
 
你有想過畢業九年後的你會變什麼樣子嗎?
你有想過畢業九年後的你會變什麼樣子嗎?你有想過畢業九年後的你會變什麼樣子嗎?
你有想過畢業九年後的你會變什麼樣子嗎?Mu Chun Wang
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務Mu Chun Wang
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享Win Yu
 
個人電腦/網站的資訊安全:給非營利組織的建議
個人電腦/網站的資訊安全:給非營利組織的建議個人電腦/網站的資訊安全:給非營利組織的建議
個人電腦/網站的資訊安全:給非營利組織的建議Net Tuesday Taiwan
 
FreeTalk: 企業資安下之工程師成長歷程
 FreeTalk: 企業資安下之工程師成長歷程 FreeTalk: 企業資安下之工程師成長歷程
FreeTalk: 企業資安下之工程師成長歷程loyo
 
Hiiir 資安講座 IV 伺服器端攻擊與防禦I
Hiiir 資安講座 IV 伺服器端攻擊與防禦IHiiir 資安講座 IV 伺服器端攻擊與防禦I
Hiiir 資安講座 IV 伺服器端攻擊與防禦IHiiir Lab
 
渗透测试思路技术与方法
渗透测试思路技术与方法渗透测试思路技术与方法
渗透测试思路技术与方法
 
Trace 程式碼之皮
Trace 程式碼之皮Trace 程式碼之皮
Trace 程式碼之皮Wen Liao
 
不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試彼得潘 Pan
 
Got Your PW - 一場入門資安的微旅行
Got Your PW - 一場入門資安的微旅行Got Your PW - 一場入門資安的微旅行
Got Your PW - 一場入門資安的微旅行Allen Chou
 
資安人員如何協助企業面對層出不窮的資安威脅
資安人員如何協助企業面對層出不窮的資安威脅 資安人員如何協助企業面對層出不窮的資安威脅
資安人員如何協助企業面對層出不窮的資安威脅 Tim Hsu
 
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
《計算機結構與作業系統裏》--  資工系學生們經常搞錯的那些事兒!《計算機結構與作業系統裏》--  資工系學生們經常搞錯的那些事兒!
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!鍾誠 陳鍾誠
 
Bootstrap4 與他的好搭檔
Bootstrap4 與他的好搭檔Bootstrap4 與他的好搭檔
Bootstrap4 與他的好搭檔Chih-cheng Wang
 
DARPA CGC and DEFCON CTF: Automatic Attack and Defense Technique
DARPA CGC and DEFCON CTF: Automatic Attack and Defense TechniqueDARPA CGC and DEFCON CTF: Automatic Attack and Defense Technique
DARPA CGC and DEFCON CTF: Automatic Attack and Defense TechniqueChong-Kuan Chen
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Justin Lin
 

Destaque (20)

用JavaScript 實踐《軟體工程》的那些事兒!
用JavaScript  實踐《軟體工程》的那些事兒!用JavaScript  實踐《軟體工程》的那些事兒!
用JavaScript 實踐《軟體工程》的那些事兒!
 
Git - a powerful version control tool
Git - a powerful version control toolGit - a powerful version control tool
Git - a powerful version control tool
 
你有想過畢業九年後的你會變什麼樣子嗎?
你有想過畢業九年後的你會變什麼樣子嗎?你有想過畢業九年後的你會變什麼樣子嗎?
你有想過畢業九年後的你會變什麼樣子嗎?
 
手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務手把手教你如何串接 Log 到各種網路服務
手把手教你如何串接 Log 到各種網路服務
 
無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享無瑕的程式碼 Clean Code 心得分享
無瑕的程式碼 Clean Code 心得分享
 
魔球Moneyball
魔球Moneyball魔球Moneyball
魔球Moneyball
 
Annotation processing
Annotation processingAnnotation processing
Annotation processing
 
個人電腦/網站的資訊安全:給非營利組織的建議
個人電腦/網站的資訊安全:給非營利組織的建議個人電腦/網站的資訊安全:給非營利組織的建議
個人電腦/網站的資訊安全:給非營利組織的建議
 
FreeTalk: 企業資安下之工程師成長歷程
 FreeTalk: 企業資安下之工程師成長歷程 FreeTalk: 企業資安下之工程師成長歷程
FreeTalk: 企業資安下之工程師成長歷程
 
Hiiir 資安講座 IV 伺服器端攻擊與防禦I
Hiiir 資安講座 IV 伺服器端攻擊與防禦IHiiir 資安講座 IV 伺服器端攻擊與防禦I
Hiiir 資安講座 IV 伺服器端攻擊與防禦I
 
React js
React jsReact js
React js
 
渗透测试思路技术与方法
渗透测试思路技术与方法渗透测试思路技术与方法
渗透测试思路技术与方法
 
Trace 程式碼之皮
Trace 程式碼之皮Trace 程式碼之皮
Trace 程式碼之皮
 
不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試不能承受的感動 - iOS App實機測試
不能承受的感動 - iOS App實機測試
 
Got Your PW - 一場入門資安的微旅行
Got Your PW - 一場入門資安的微旅行Got Your PW - 一場入門資安的微旅行
Got Your PW - 一場入門資安的微旅行
 
資安人員如何協助企業面對層出不窮的資安威脅
資安人員如何協助企業面對層出不窮的資安威脅 資安人員如何協助企業面對層出不窮的資安威脅
資安人員如何協助企業面對層出不窮的資安威脅
 
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
《計算機結構與作業系統裏》--  資工系學生們經常搞錯的那些事兒!《計算機結構與作業系統裏》--  資工系學生們經常搞錯的那些事兒!
《計算機結構與作業系統裏》-- 資工系學生們經常搞錯的那些事兒!
 
Bootstrap4 與他的好搭檔
Bootstrap4 與他的好搭檔Bootstrap4 與他的好搭檔
Bootstrap4 與他的好搭檔
 
DARPA CGC and DEFCON CTF: Automatic Attack and Defense Technique
DARPA CGC and DEFCON CTF: Automatic Attack and Defense TechniqueDARPA CGC and DEFCON CTF: Automatic Attack and Defense Technique
DARPA CGC and DEFCON CTF: Automatic Attack and Defense Technique
 
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
 

Semelhante a Git 經驗分享

Version control0221
Version control0221Version control0221
Version control0221jianhongciou
 
Git flow
Git flowGit flow
Git flowshaokun
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践LC2009
 
Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...Jimmy Lai
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片Tony Yeh
 
Learn git
Learn gitLearn git
Learn git甘 李
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
Use Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git WorkflowUse Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git WorkflowLiangjun Jiang
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理Pu Lee
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍medcl
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgitRhythm Sun
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定Shengyou Fan
 
Git introduction
Git introductionGit introduction
Git introductionmythnc
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
如何與全世界分享你的 Library
如何與全世界分享你的 Library如何與全世界分享你的 Library
如何與全世界分享你的 LibraryMu Chun Wang
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门Rongxing Liu
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2Chris Chen
 

Semelhante a Git 經驗分享 (20)

Version control0221
Version control0221Version control0221
Version control0221
 
Git flow
Git flowGit flow
Git flow
 
Git入门与实践
Git入门与实践Git入门与实践
Git入门与实践
 
Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...
 
Intro to Git 投影片
Intro to Git 投影片Intro to Git 投影片
Intro to Git 投影片
 
Learn git
Learn gitLearn git
Learn git
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Use Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git WorkflowUse Git-flow Manage Your Git Workflow
Use Git-flow Manage Your Git Workflow
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定
 
Git introduction
Git introductionGit introduction
Git introduction
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
如何與全世界分享你的 Library
如何與全世界分享你的 Library如何與全世界分享你的 Library
如何與全世界分享你的 Library
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops)
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2
 

Mais de Mu Chun Wang

如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進Mu Chun Wang
 
深入淺出 autocomplete
深入淺出 autocomplete深入淺出 autocomplete
深入淺出 autocompleteMu Chun Wang
 
你畢業後要任職的軟體業到底都在做些什麼事
你畢業後要任職的軟體業到底都在做些什麼事你畢業後要任職的軟體業到底都在做些什麼事
你畢業後要任職的軟體業到底都在做些什麼事Mu Chun Wang
 
網路服務就是一連串搜尋的集合體
網路服務就是一連串搜尋的集合體網路服務就是一連串搜尋的集合體
網路服務就是一連串搜尋的集合體Mu Chun Wang
 
老司機帶你上手 PostgreSQL 關聯式資料庫系統
老司機帶你上手 PostgreSQL 關聯式資料庫系統老司機帶你上手 PostgreSQL 關聯式資料庫系統
老司機帶你上手 PostgreSQL 關聯式資料庫系統Mu Chun Wang
 
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能Mu Chun Wang
 
Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Mu Chun Wang
 
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度Mu Chun Wang
 
如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件Mu Chun Wang
 
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題Mu Chun Wang
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構Mu Chun Wang
 
Google Maps 開始收費了該怎麼辦?
Google Maps 開始收費了該怎麼辦?Google Maps 開始收費了該怎麼辦?
Google Maps 開始收費了該怎麼辦?Mu Chun Wang
 
Git 可以做到的事
Git 可以做到的事Git 可以做到的事
Git 可以做到的事Mu Chun Wang
 
那些大家常忽略的 Cache-Control
那些大家常忽略的 Cache-Control那些大家常忽略的 Cache-Control
那些大家常忽略的 Cache-ControlMu Chun Wang
 
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化Mu Chun Wang
 
API Blueprint - API 文件規範的三大領頭之一
API Blueprint - API 文件規範的三大領頭之一API Blueprint - API 文件規範的三大領頭之一
API Blueprint - API 文件規範的三大領頭之一Mu Chun Wang
 
團體共同協作與版本管理 - 01認識共同協作
團體共同協作與版本管理 - 01認識共同協作團體共同協作與版本管理 - 01認識共同協作
團體共同協作與版本管理 - 01認識共同協作Mu Chun Wang
 
HR Search - 輕鬆管理面試者
HR Search - 輕鬆管理面試者HR Search - 輕鬆管理面試者
HR Search - 輕鬆管理面試者Mu Chun Wang
 
Hedis - GET HBase via Redis
Hedis - GET HBase via RedisHedis - GET HBase via Redis
Hedis - GET HBase via RedisMu Chun Wang
 
104學年度行動裝置程式設計課程說明
104學年度行動裝置程式設計課程說明104學年度行動裝置程式設計課程說明
104學年度行動裝置程式設計課程說明Mu Chun Wang
 

Mais de Mu Chun Wang (20)

如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進如何在有限資源下實現十年的後端服務演進
如何在有限資源下實現十年的後端服務演進
 
深入淺出 autocomplete
深入淺出 autocomplete深入淺出 autocomplete
深入淺出 autocomplete
 
你畢業後要任職的軟體業到底都在做些什麼事
你畢業後要任職的軟體業到底都在做些什麼事你畢業後要任職的軟體業到底都在做些什麼事
你畢業後要任職的軟體業到底都在做些什麼事
 
網路服務就是一連串搜尋的集合體
網路服務就是一連串搜尋的集合體網路服務就是一連串搜尋的集合體
網路服務就是一連串搜尋的集合體
 
老司機帶你上手 PostgreSQL 關聯式資料庫系統
老司機帶你上手 PostgreSQL 關聯式資料庫系統老司機帶你上手 PostgreSQL 關聯式資料庫系統
老司機帶你上手 PostgreSQL 關聯式資料庫系統
 
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
使用 PostgreSQL 及 MongoDB 從零開始建置社群必備的按讚追蹤功能
 
Funliday 新創生活甘苦談
Funliday 新創生活甘苦談Funliday 新創生活甘苦談
Funliday 新創生活甘苦談
 
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
大解密!用 PostgreSQL 提升 350 倍的 Funliday 推薦景點計算速度
 
如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件如何使用 iframe 製作一個易於更新及更安全的前端套件
如何使用 iframe 製作一個易於更新及更安全的前端套件
 
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
pppr - 解決 JavaScript 無法被搜尋引擎正確索引的問題
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
 
Google Maps 開始收費了該怎麼辦?
Google Maps 開始收費了該怎麼辦?Google Maps 開始收費了該怎麼辦?
Google Maps 開始收費了該怎麼辦?
 
Git 可以做到的事
Git 可以做到的事Git 可以做到的事
Git 可以做到的事
 
那些大家常忽略的 Cache-Control
那些大家常忽略的 Cache-Control那些大家常忽略的 Cache-Control
那些大家常忽略的 Cache-Control
 
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
如何利用 OpenAPI 及 WebHooks 讓老舊的網路服務也可程式化
 
API Blueprint - API 文件規範的三大領頭之一
API Blueprint - API 文件規範的三大領頭之一API Blueprint - API 文件規範的三大領頭之一
API Blueprint - API 文件規範的三大領頭之一
 
團體共同協作與版本管理 - 01認識共同協作
團體共同協作與版本管理 - 01認識共同協作團體共同協作與版本管理 - 01認識共同協作
團體共同協作與版本管理 - 01認識共同協作
 
HR Search - 輕鬆管理面試者
HR Search - 輕鬆管理面試者HR Search - 輕鬆管理面試者
HR Search - 輕鬆管理面試者
 
Hedis - GET HBase via Redis
Hedis - GET HBase via RedisHedis - GET HBase via Redis
Hedis - GET HBase via Redis
 
104學年度行動裝置程式設計課程說明
104學年度行動裝置程式設計課程說明104學年度行動裝置程式設計課程說明
104學年度行動裝置程式設計課程說明
 

Git 經驗分享