版本控制 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 個指令就夠了

https://slides.com/ming-derwang/that-s-g-it#/5

第一次用 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-Tutorials 

中文 git 使用教學

(hands-on 練習)

https://learngitbranching.js.org/

英文 git 測驗

(考試)

版本控制 git 101

By Ming-der Wang

版本控制 git 101

  • 1,004