![](https://hackmd.io/_uploads/HkavON4y6.png) ### Git 1. **分散式版本控制系統** 2. **Git** != **Github** --- ### Install > 善用Homebrew 進行Mac && Linux 安裝(可以集合式管理套件版本) > https://brew.sh 1. Mac ``` ~ $ brew install git ``` 2. Linux ``` $ brew install git ``` --- ### SSH 建立 1. 取得ssh key ``` $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` > id_rsa.pub:公開金鑰 (可以讓大家都知道) > id_rsa:私密金鑰 (無論如何不能洩漏) ``` eval "$(ssh-agent -s)" ``` ``` ssh-add ~/.ssh/id_rsa ``` ``` cat ~/.ssh/id_rsa.pub ``` 3. 將publish key -> Github > 1. https://github.com/settings/keys > 2. New SSH key ``` ssh -T git@github.com ``` --- ### Git config ``` $ git config --global user.name "使用者名稱" $ git config --global user.email "使用者電子郵件" ``` --- ### 指令介紹 1. 初始化當前目錄 ``` $ git init ``` > 在當前位置新增 .git 隱藏資料夾,也就是建立 Git Repository(檔案庫)。目的是初始化這個目錄,讓 Git 對這個目錄做版本控管。 2. 檢查當前版本狀態 ``` $ git status ``` > 未進入版本控管(Untracked)、新增檔案(New File)、刪除檔案(Deleted)、檔案已修改(Modified)等。是會經常使用的指令。 3. 加入版本控制 ``` $ git add ``` > 可以單獨加入git add XXX 或者 git add . 直接全部加入 4. 新建版本控制 ``` $ git commit ``` > 可以直接使用git commit -m "新建內容" 用來建立新的版本 5. 查看版本紀錄 ``` $ git log ``` > 從新到舊列出,內容分別是版本號碼、提交者、提交時間。 6. 切換分支 ``` $ git checkout ``` > 這邊是切換現有的版本 git checkout "分支" or git checkout -b "建立新分之並且切換" b == branch,請習慣性建立Dev 7. 建立並跳到該分支 ``` $ git branch -D ``` > 偷懶的話基本上用commit -b 就可以達到了 8. 修改分支名稱 ``` $ git branch -m XXX SSS ``` > 基本上很少用到 9. 回到過去版本 ``` $ git reset --hard ``` > 1. git reset --hard HEAD #上一個 > 2. git reset --hard HEAD^ #上上個 > 3. git reset --hard HEAD~2 #上上個 > 4. git reset --hard "id number" #回到指定id 的版本 10. 本地端同步遠端分支 ``` $ git pull ``` > 這個作法基本上是很重要的,在每一次修改程式碼要習慣性pull,讓本地端跟遠端分支的內容一樣 11. 建立遠端連線 ``` $ git remote add upstream github儲存庫位置 ``` > 這個部分是為了讓clone 下來的專案能夠與遠端上建立連線 > 若要刪除remote -v 的origin ``` git remote remove XXX ``` 12. 上傳本地端至遠端 ``` git push ``` > git push -u origin 分支名稱 也可以這麼做確認指定分支 13. 刪除本地分支 ``` $ git branch -d branch名稱 ``` 刪除遠端分支 ``` git push origin -d branch名稱 ``` > d == delete * 補充: > 1. fork == 拷貝一份到自己的除存庫 > 2. clone == 從遠端下載到本地端 ### GIT flow >通常gitflow有以下幾個:master, devlope, release,hotfix,feature * master: 用來擺放穩定上線的版本 * develope: 用來開發用的 * release: 用來做最後上線前的測試版本, 沒問題後會一併合到master以及develope * hotfix: 用來處理緊急錯誤 結束後會合併到develope * feature: 用來開心功能, 測試完會合併到develope * how to use? ``` brew install git-flow-avh ``` 通常開啟功能 再來切換到develop merge進去 再來就是release 再來就是push 初始化git流程 ``` git flow init ``` 開啟git-flow 一致化 ``` git flow XXX[flow-name] start XXX ``` ``` git flow XXX[flow-name] start XXX ``` 這邊舉例開發一個新功能到部署到main的過程 ``` git flow feature start feature-name ``` >這個命令會自動從 develop 分支創建一個新的 feature/feature-name 分支,並且切換到這個分支。 ``` git add . ``` ``` git commit -m "" ``` ``` git flow feature finish feature-name ``` >1. 切換到 develop 分支。 >2. 將 feature/feature-name 分支合併到 develop。 >3. 刪除 feature/feature-name 分支。 ``` git push origin develop ``` >如果團隊其他人需要這些修改,你可以將合併後的 develop 分支推送到遠端 ``` git flow release start version-number ``` >version-number 是準備發佈的版本號,例如 1.0.0。這個命令會自動從 develop 分支創建一個 release/version-number 分支。 ``` git add . ``` ``` git commit -m "" ``` ``` git flow release finish version-number ``` >1. 將 release/version-number 分支合併到 main 分支。 >2. 在 main 分支上打上一個 v1.0.0 的標籤。 >3. 將 release/version-number 分支合併回 develop,以確保修正同步到開發分支。 >4. 刪除 release/version-number 分支。 ``` git push origin main git push origin develop git push --tags ``` >將 main 和 develop 分支推送到遠端以便於發佈 --- :accept: 有效建立協作能力 :accept: 增加團隊開發效率 :ghost: 下一章--> **Docker? 容器化技術** ©Copyright © 2023 by CHUNG HONG HAO. All Rights Reserved.