--- tags: Git --- # 版本控制(Version Control) * 完整記錄軟體**變化**的過程(人、事、時、地、物) * 紀錄版本變化而衍伸出來的功能 * 查詢歷史紀錄 * 復原變更 * 比對差異 * 標記版號 * 變更追蹤 * 多人版控進一步衍伸出的功能 * 協同作業 * 分支合併 * 版控流程 ## 版本控制的種類 ### 1. 集中式 單一伺服器,記錄所有版本的檔案,且有多個客戶端從伺服器從伺服器取出檔案。 如:CVS, Subversion(SVN) 及 Perforce * 優點: * 所有版本集中於伺服器管理,可選用鎖定或合併等版控策略 * 較為精細的權限管控(針對目錄或檔案) * 缺點: * 沒網路就無法進行版本控管,其中包含: * 可本地開發,但無法提交新版本 * 無法查詢歷史紀錄 ![](https://i.imgur.com/9ZMLqPT.png) ### 2. 分散式 客戶端不只是取出最後一版的檔案,而是完整複製整個儲存庫。即使是整個系統賴以運作的電腦損毀,皆可將任何一個客戶端先前複製的資料還原到伺服器。 如:Git, Mercurial, Bazaar, Darcs。 * 優點: * 每位開發人員保有完整的儲存的儲存庫,等於每個人都擁有完整的儲存庫備份 * 可以在本地端建立離線的版本與歷史紀錄,不需要伺服器支援就可以運作版本控制 * 缺點: * 無法鎖定版控策略(僅能使用合併策略) * 無法對專案進行精細的權限控管(但可切割成多個儲存庫) ![](https://i.imgur.com/B2Iqqbh.png) ## 什麼是 Git? * [Git](https://git-scm.com/downloads):是一套免費、開源分散式的版本控制工具 * [GitLab](https://gitlab.com/users/sign_in):以 Git 為核心技術基礎的「雲端版本控制服務平台」,類似的服務還有 [GitHub](https://github.com/login)、[Bitbucket](https://bitbucket.pearson.com/login?nextUrl=%2Fdashboard) * Git 圖形化工具:以圖形化介面呈現Git本地儲存庫中的資訊 * [Source Tree](https://www.sourcetreeapp.com/) * TortoiseGit(小烏龜) * GitHub for Desktop * IDE整合的Git * Eclipse * Visual Studio * XCode ## Git 基礎操作指令 | 指令 | 功能 | 備註 | | -------- | -------- | -------- | | git init | 初始化,創建 .git 目錄 | 建立一個儲存庫 | | git add | 建立索引 | "**挑選**"想要打包的修改檔案 | | git commit | 將索引中的檔案"**打包**"並註明內容 | | | git push | 將本地儲存庫**上傳**至遠端儲存庫(例如: GitLab) | 先 pull,再 push | | git pull | **下載**遠端儲存庫 | 可能發生衝突 | | git branch | 列出分支 | | | git checkout <branch name> | 切換分支 | 可能發生衝突 | | git tag | 列出標籤 | 特別的時間點貼標籤,來表示其重要性 | | git merge | 合併分支 | 可能發生衝突 | ## 標籤(版本號) 版本號結構大概是 v1.3.5, 也就是 version{**major**}.{**minor**}.{**hotfix**} * Major: 功能新增會影響舊版使用者 > 強制更新 * Minor: 功能新增不影響舊版使用者 > 建議更新 * Hotfix: 單純修 bug 或文字修改 ## 版本控制流程(Git flow) 所有的分支基礎功能都是一模一樣, 但依照產品開發流程的不同,而有不同的版控流程, 下列分支,是人賦予分支的意義下列幾種 ![](https://i.imgur.com/pQpSGQX.png) ## 參考資料 [版本控管VCS-基礎概念,SVN、GIT比較](https://stevenjhu.com/2019/11/11/%E7%89%88%E6%9C%AC%E6%8E%A7%E7%AE%A1vcs-%E5%9F%BA%E7%A4%8E%E6%A6%82%E5%BF%B5%EF%BC%8Csvn%E3%80%81git%E6%AF%94%E8%BC%83/) [猴子都能懂的Git入門指南](https://backlog.com/git-tutorial/tw/) [git flow 實戰經驗談 part2 - 可能更好的 gitflow](https://blog.hellojcc.tw/a-better-git-flow/)