版本控制 git 101
Ming-der Wang (王銘德)
Python Taiwan (Telegram) 讀書會
(8/29/2020 9:00pm zoom)
為什麼叫版本控制?
git 能幫你做 整個目錄 的版本控制
https://gist.github.com 只能做 檔案 的版本控制
什麼是 "版本"?
以 Python 為例, 目前有
* Python2 (v2.7.16)
* Python3 (v3.8.2)
這裡的 v2.7.16 或 v3.8.2
就是 python 原始碼 版本控制 裡標註的版本號碼
像在右邊的圖, 是 cpython github.com 裡一個版本清單
什麼是 "版號"?
比如說手機或 iPod touch
也都會顯示目前使用的作業系統是哪一版 (Version)
以右邊, iPod touch 畫面為例, 該作業系統軟體版本是 12.4.8
(說明)
12 是大版號(大改動)
4 是小版號 (功能不變)
8 是微調 (有些錯誤修正)
什麼叫修訂版?(Revisions)
第一版
5行都是新增加的
第二版
跟上一版的差別只有新增第 6 行
(在 git 世界裡)
+號表示新增
- 號表示刪除
不管是 文章, 筆記, 程式, 都有可能修改過好幾次, 每次修改, 就會產生新的版本
常見沒用工具的版本控制方法
*用不同檔名或加日期在檔名上, 例如
main_昨天.py
main_09102020.py
main_舊的.py
main_v10.0.1.py
* 整個目錄就用 tar ball, 例如
專案A_08202020.tar.zip
*或甚至用不同目錄名稱, 來做版本區別之, 例如
c:\專案A\08201999
c:\專案A\04012020
c:\專案B\08202018
c:\專案B\08212018
c:\專案C\01201962
如果沒用工具的版本控制方法, 時間越久, 檔案越多, 檔案越大, 參與的人多, 問題就越來越大了
工作效率越來越差,
品質越來越不好控制,
沒結案, 無法繼續開發下一版,
(舊的都砍了, 不就沒事? 啊 ~~, 問題是誰造成的都找不到了)
~ 災難的開始 ~
所以, 如果有一個工具, 能讓我們知道修訂版之間的差別, 能快速的找到舊的版本, 能管理多人同時更改的檔案, 我們稱之為寫程式的"版本控制"工具
(git 未必只能寫程式時用, 任何文件都可以)
git 就是其中之ㄧ
也是目前軟體界最流行的一個
git 它有哪些功能?
- 單一目錄下, 多檔同時控管
- 可上傳一份到 git server ( github.com 為例 )
- 可從 git server 上複製一份 (fork)
- 可從 git server 下載到本機
- 可多人同時修改這些檔案
- 可增加分枝 (branches)
- 可合併分枝回主幹 (master)
- 可在分枝上跳回舊版
- 可設置標籤 (tags)
- 可跳回標籤設定時的版本
- 可看到修訂版之間的差別
- 可以同時開很多專案 (我們稱之為 git repo)
學 git, 16 個指令就夠了
第一次用 git commit 時
會要求你輸入姓名與 email address
例如:
$ git commit -m 'init'
*** Please tell me who you are.
須執行以下兩行, 用你的 email 和名字
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
換成你的名字和 email
(這只要做一次 )
第一次使用 github.com ssh key 要加到 Settings 裡
產生 ssh key 方法可以參考
git 進階
* remote 分散式的概念
* gitflow 開 branches 的方法
我們稱這 origin 為 "remote"
- 通常只有一個 origin remote
- 但我們也可以有多個 remote (平常比較少這樣用)
- 因此我們每個人的 local 也未必跟別人相同
Gitflow 是啥?
公司專案, 要如何分 branches?
* 有一個主枝幹 (master)
* 通常不再主枝幹上開發
* 只有在主枝幹上出版(加 tags)
* 開發大主幹 (develop)
* 以增加新功能命名分枝
* 以未來大新版命名分枝
* 以改 bug 問題命名分枝
* hotfixes (熱修改) <- 說明
click here
版本控制 git 101
By Ming-der Wang
版本控制 git 101
- 1,004