開源項目Lin CMS的開發流程

前言

林間有風團隊目前共有兩個開源項目,一個是微信小程序原生組件庫 Lin UI,一個是先後端分離的web端內容管理系統 Lin CMS。筆者屬於 Lin CMS 前端小組,也就是 lin-cms-vue 項目。從 2019年1月17日 提交第一個 commit 至今差很少已經半年時間,在磕磕絆絆中也有了些許成長。前端

本文主要介紹 lin-cms-vue 的開發流程。剛開始團隊成員較少,都是在一個分支上進行開發,並無過多的考慮什麼流程方案。後來因爲團隊成員的不斷補充,咱們開始規範開發流程,採用的是目前比較主流的 GitFlow 工做流。一個好的、統一的開發流程,在團隊合做中是相當重要的,可以極大的提高工做效率。那麼下面大體介紹下 GitFlow 工做流。vue

GitFlow工做流

雖然有這麼優秀的版本管理工具(Git),可是咱們面對版本管理的時候,依然有很是大的挑戰,你們工做在同一個倉庫上,那麼彼此的代碼協做必然帶來不少問題和挑戰,以下:git

  • 如何開始一個 Feature 的開發,而不影響別的 Feature?
  • 因爲很容易建立新分支,分支多瞭如何管理,時間久了,如何知道每一個分支是幹什麼的?哪些分支已經合併回了主幹?

GitFlow 被譽爲是在 Git 之上構建的一項軟件開發最佳實踐,它定義了一個圍繞項目發佈的嚴格分支模型。GitFlow 沒有增長任何新的概念和命令,它只是一個 git 管理的規範,一個開發的指導方針。github

分支 說明
master 主分支(保護分支)
develop 開發分支(保護分支)
hotfix/ bug緊急修復分支
feature/ 功能分支,開發新功能,完成之後合併到開發分支

經過上面的簡單介紹咱們大體瞭解了什麼是 GitFlow 工做流,固然這只是一個指導方針,在實際應用中還要根據項目及成員的具體狀況來進行適當的調整。web

咱們將 masterdevelop 分支列爲保護分支。保護分支意味着任何人不得直接提交代碼到該分支,只能經過 Pull Request 合併分支。下面以一個新功能的開發爲例,介紹下相關開發流程。小程序

開發流程

這裏以開發一個新的功能驗證碼(security code)爲例:後端

開發新Feature

從當前最新的開分分支 develop 切出一個 feature 功能分支,執行下面命令,注意這是在本地倉庫的新分支:微信小程序

git checkout -b security-code
複製代碼

security-code 分支編寫功能代碼,提交commit,到此時咱們均是在本地倉庫操做,若是想要將本地的 security-code 分支 push 到遠端,執行下面命令,其中 feature/ 表明這是一個功能分支:微信

git push origin security-code:feature/security-code

 * [new branch]      security-code -> feature/security-code
複製代碼

在遠端建立了 feature/security-code 分支後,security-code 的功能尚未開放完畢,須要繼續開發並提交 commit。將近期 commit 提交至遠端,執行如下命令:框架

git push origin HEAD:feature/security-code
複製代碼

若是在開發 security-code 時,有小夥伴將新功能合入了 develop 而 security-code 又依賴新功能怎麼辦?那就把遠端已經合併過最新的開發分支 develop 拉下來:

git pull origin develop
複製代碼

假設 security-code 已經開發完畢,而且有10條commit記錄,咱們要將功能分支的代碼合併到開發分支:提交 PRdevelop 分支。 不論是團隊成員仍是外部貢獻者的 pull request 都須要通過代碼 review 才能合併進開發分支。代碼合併有三種方式:Create a merge commit / Squash and merge / Rebase and merge

第一種 (Create a merge commit) 直接將 security-code 分支的 commit 合併到 develop

第二種 (Squash and merge) 將 security-code 分支的這10條 commit 合併成一條後,再合入 develop(建議使用)。

第三種 (Rebase and merge) 與第二種功能同樣,區別是 rebase 變基,squash 只合並 commit。

合併分支後便可將功能分支刪除,刪除分支分爲刪除本地分支和遠端分支,遠端分支的刪除直接在 GitHub 頁面操做便可,下面的命令來刪除本地分支:

git branch -D security-code
複製代碼

通過長時間的分支增刪後,咱們會發現有些遠端的分支分明已經刪掉了,可是在本地分支經過 git branch -a 仍是可以看到那些已經被刪除掉的分支,這時候咱們能夠用下面的命令進行清理:

git remote prune origin

➜  lin-cms-vue git:(exception) git remote prune origin
修剪 origin
URL:https://github.com/TaleLin/lin-cms-vue.git
 * [已刪除] origin/components/select
 * [已刪除] origin/feature/404
 * [已刪除] origin/feature/enter-animation
 * [已刪除] origin/feature/layout
 * [已刪除] origin/feature/ui-color
 * [已刪除] origin/feature/ui-op
 * [已刪除] origin/publish/beta2
複製代碼

版本發佈

通過一段時間的開發,咱們完成了一個階段的開發任務。這時候要進行功能測試,將當前開發分支的代碼部署到測試環境,團隊成員共同完成測試。若是發現bug及時進行修復,如無異常,則發佈新版本:

  1. 從 develop 提交 PR 到 master 主分支,打tag;
  2. 添加該版本相關文檔介紹;
  3. 編寫版本日誌。

更新GitHub新版本到本身的項目

Lin CMS有一個線上演示項目,在開源項目新版本發佈後,跟你們同樣,筆者要轉換角色以一個開源項目使用者的身份進行線上項目升級。可是,做爲工程類的開源項目,不能像一些只引用核心庫的開源項目那樣,直接更新版本就行,咱們的項目自己已經有寫的有業務了,這時候要怎麼辦呢?

若是沒有修改框架的核心代碼,只是新增了一些業務文件,能夠直接將框架核心代碼替換掉。若是是另外一種狀況已經修改了框架的核心代碼,這時候想要升級就要比較當心了,須要更新GitHub新版本到本身的項目。這種方法實際上是比較危險的,要求你可以徹底把握住衝突的部分那些是須要的,那些不須要的。

  1. 首先,添加開源項目的遠程連接:
git remote add lin-cms-vue https://github.com/TaleLin/lin-cms-vue.git
複製代碼

添加後能夠經過下面的命令查看下本地項目的遠程連接列表:

git remote -v

# ➜ lin-cms-demo git:(master) git remote -v
# lin-cms-vue https://github.com/TaleLin/lin-cms-vue.git (fetch)
# lin-cms-vue https://github.com/TaleLin/lin-cms-vue.git (push)
# origin https://git.coding.net/indexer/lin-cms-demo.git (fetch)
# origin https://git.coding.net/indexer/lin-cms-demo.git (push)
複製代碼
  1. 而後,將開源項目新版本 merge 到本地項目,這裏的 --allow-unrelated-histories 是容許 merge 不相關的倉庫:
git merge lin-cms-vue/master --allow-unrelated-histories
複製代碼

注意: 若是在merge後,發現項目改崩掉了,這時候記得不要提交commit,執行下面的命令,將本次修改所有撤回

git checkout .
複製代碼

總結

以上就是 lin-cms-vue 的開發流程總結。文筆很菜,以前也不多進行這種文字形式的輸出,之後會更多的增強鍛鍊,但願能給本文的讀者帶來一絲收穫。

筆者如今也是處於學習階段,若有錯誤歡迎指正,以爲有用的能夠幫忙給開源項目點個Star,QQ討論羣:814597236,感謝!

相關文章
相關標籤/搜索