【宅印團(tuán)隊(duì)】動(dòng)手用 git flow 工作流進(jìn)行團(tuán)隊(duì)協(xié)作開(kāi)發(fā)

簡(jiǎn)介

<p>
Git的出現(xiàn),使軟件開(kāi)發(fā)協(xié)作變得非常靈活方便,使用git 可以說(shuō)是當(dāng)今程序員的必備技能。Git 是一個(gè)布式版本控制系統(tǒng),只要在團(tuán)隊(duì)內(nèi)部約定特定的工作流程,即可很方便、很有條理地進(jìn)行團(tuán)隊(duì)協(xié)作開(kāi)發(fā)。這里是介紹幾種工作流的兩篇文章:《Git 工作流程》(By 阮一峰)《常見(jiàn)工作流比較》(翻譯 By 童仲毅)。
我們團(tuán)隊(duì)也使用 git 作為團(tuán)隊(duì)開(kāi)發(fā)協(xié)作工具,并使用 git flow 作為工作流。接下來(lái)我們從 git 的安裝和配置開(kāi)始, 通過(guò) 簡(jiǎn)單任務(wù) 的形式,一步步讓大家在實(shí)踐中使用 git flow 進(jìn)行團(tuán)隊(duì)項(xiàng)目開(kāi)發(fā)。

下面我們先來(lái)看看我們要來(lái)一起完成的集體任務(wù):一個(gè)超簡(jiǎn)單的 "團(tuán)隊(duì)成員介紹網(wǎng)站"。該網(wǎng)站的架構(gòu)很簡(jiǎn)單,包含一個(gè)主頁(yè)和許多個(gè)團(tuán)隊(duì)成員的介紹頁(yè)面,網(wǎng)站的原型如下:

網(wǎng)站主頁(yè): /index.html
個(gè)人介紹頁(yè): /members/xiaoming

這里是已經(jīng)部署的網(wǎng)站地址: http://birdylee.github.io/, 點(diǎn)開(kāi)看看有哪些人的大名已經(jīng)在上面了!每個(gè) 個(gè)人介紹頁(yè) 是由不的同人各自開(kāi)發(fā)的,并通過(guò)我們將要介紹的工作流更新到我們的這個(gè)網(wǎng)站里面!跟著這個(gè)教程一步步做,你也可以在上面放上你的專(zhuān)屬頁(yè)哦!~

1、安裝和配置 git

Git 幾乎可以在任何平臺(tái)上使用,這里是 Git 官方下載地址。如果下載較慢,可以從國(guó)內(nèi)鏡像下載(感謝廖雪峰老師的維護(hù)),下載后按默認(rèn)選項(xiàng)安裝即可。
如果你是 windows 用戶,git 安裝后,可以在任意目錄的右鍵菜單找到 git bash here 選項(xiàng),如下:

git bash here 選項(xiàng)

點(diǎn)擊即可在該目錄打開(kāi) git 命令終端:

git 命令終端

接下來(lái)我們來(lái)配置全局git基本信息,包括用戶名和郵箱,運(yùn)行如下命令(<...>表示需要你自行填寫(xiě)):
$ git config --global user.name <你的名字>
$ git config --global user.email <你的郵箱>

這些信息指明你的身份,這樣當(dāng)你把代碼分享給出去的時(shí)候,別人可以通過(guò)這些git信息獲悉是哪些代碼是你寫(xiě)的,并可以通過(guò)郵箱聯(lián)系你。

2、創(chuàng)建git倉(cāng)庫(kù)

git倉(cāng)庫(kù)(git repository)是一個(gè)項(xiàng)目目錄,這個(gè)目錄被 git 作為一個(gè)單位管理起來(lái),該目錄下的每個(gè)文件都可以被 git 跟蹤。 git 倉(cāng)庫(kù)分為 本地倉(cāng)庫(kù)遠(yuǎn)程倉(cāng)庫(kù),下面我們都來(lái)動(dòng)手創(chuàng)建一個(gè)。為了演示協(xié)作工作流,我們從遠(yuǎn)程倉(cāng)庫(kù)開(kāi)始講起。

2.2 創(chuàng)建遠(yuǎn)程(云端) git倉(cāng)庫(kù):

git遠(yuǎn)程倉(cāng)庫(kù)就是放在 git 服務(wù)器的 git 倉(cāng)庫(kù)。目前流行的 git 托管服務(wù)提供商有 github, gitlab 等,國(guó)內(nèi)的有 git@osc(碼云), coding 等,我們這個(gè)項(xiàng)目將使用 github 存放項(xiàng)目代碼 (若無(wú)github賬號(hào),請(qǐng)注冊(cè)一下,程序員必備)。
創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)有兩種方式:

  • 生成一個(gè)空的遠(yuǎn)程倉(cāng)庫(kù)
  • 從其他倉(cāng)庫(kù)fork到自己的賬戶下

前者請(qǐng)參看git個(gè)人主頁(yè),這里為了演示協(xié)作工作流,介紹后者。
首先,我們的項(xiàng)目會(huì)有一個(gè)創(chuàng)建好的 主倉(cāng)庫(kù),該倉(cāng)庫(kù)由項(xiàng)目管理員管理,用來(lái)整合來(lái)自各個(gè)團(tuán)隊(duì)成員的代碼,并對(duì)外發(fā)布。這個(gè)倉(cāng)庫(kù)有兩個(gè)分支,dev 分支和 master 分支,dev 分支用來(lái)收集來(lái)自各個(gè)成員的更新,可以做到每夜更新,當(dāng) dev 分支達(dá)到特定的版本要求時(shí),就可以合并入master 分支來(lái)進(jìn)行發(fā)布一個(gè)版本。圖示如下:

主倉(cāng)庫(kù)分支演進(jìn)

只有項(xiàng)目管理員才有對(duì)這個(gè)倉(cāng)庫(kù)的 “寫(xiě)權(quán)限”, 其他普通成員只有對(duì)該倉(cāng)庫(kù) “讀權(quán)限”。
我們的學(xué)習(xí)任務(wù)主倉(cāng)庫(kù)在這里:https://github.com/BirdyLee/birdylee.github.io

接下來(lái),我們開(kāi)始動(dòng)手把自己的自我介紹的代碼放到該倉(cāng)庫(kù)里面!我們先來(lái)介紹 "fork" , 簡(jiǎn)單的理解就是復(fù)制一個(gè)倉(cāng)庫(kù)到自己的 git 賬戶(組織)下,這樣子你就擁有了對(duì)該倉(cāng)庫(kù)的寫(xiě)入權(quán)限,我們來(lái)動(dòng)手試試:

主倉(cāng)庫(kù)

看到如下界面時(shí),你已成功地把主倉(cāng)庫(kù)地內(nèi)容復(fù)制到自己的賬戶下,這時(shí)你對(duì)該倉(cāng)庫(kù)有讀寫(xiě)權(quán)限
注意到在倉(cāng)庫(kù)名稱(chēng)下面多了一行:'' forked from BirdyLee/birdylee.github.io" ,表明這個(gè)倉(cāng)庫(kù)的 fork 來(lái)源。

對(duì)應(yīng)的項(xiàng)目在自己的倉(cāng)庫(kù)下

接下來(lái),我們就可以在自己的倉(cāng)庫(kù)里修改代碼了~當(dāng)然,我們要把項(xiàng)目文件拉到本地來(lái)進(jìn)行開(kāi)發(fā),下一節(jié)將介紹本地倉(cāng)庫(kù)。

2.2 創(chuàng)建本地 git倉(cāng)庫(kù):

git 本地倉(cāng)庫(kù)就是存放在你的電腦里的git倉(cāng)庫(kù)。
創(chuàng)建本地倉(cāng)庫(kù)有兩種方式:

  • 從本地現(xiàn)有文件夾創(chuàng)建
  • 拷貝遠(yuǎn)程倉(cāng)庫(kù)到本地

前者請(qǐng)參看廖雪峰git教程 ,這里為了演示工作流,演示如何從遠(yuǎn)程倉(cāng)庫(kù)獲取。

從遠(yuǎn)程倉(cāng)庫(kù)獲取項(xiàng)目代碼一般有兩種連接方式,HTTPS 和 SSH , 為了節(jié)省一些配置,在此使用 HTTPS 進(jìn)行演示。關(guān)于SSH連接方式,請(qǐng)參看這里。
登錄 你的賬戶 下的對(duì)應(yīng)項(xiàng)目倉(cāng)庫(kù),復(fù)制項(xiàng)目的 HTTPS 地址:

Paste_Image.png

選擇存放項(xiàng)目的父文件夾(如桌面),右鍵打開(kāi)本地git bash終端,運(yùn)行
$ git clone https://github.com/<你的用戶名>/birdylee.github.io.git
(clone 后面的內(nèi)容直接張貼即可)
運(yùn)行成功后,可以看到生成一個(gè)目錄 “birdylee.github.io”, 該目錄就是項(xiàng)目目錄,是一個(gè)被 git追蹤的文件夾(可以暫時(shí)理解為本地git倉(cāng)庫(kù)),打開(kāi)該目錄,可見(jiàn)目錄結(jié)構(gòu)如下:

目錄結(jié)構(gòu)

項(xiàng)目中的 members 目錄保存著兩個(gè)模板(_template-advanced,_template-basic)和各個(gè)成員的文件夾(xiaoming, xiaojiu 等),打開(kāi)項(xiàng)目根目錄 index.html 就可以看到網(wǎng)站的樣子。

主頁(yè)

3. 寫(xiě)入自己的代碼

下面我們來(lái)看看,怎么把自己的名字加上去,我們使用基礎(chǔ)模板做演示:

打開(kāi)members文件夾,在里面新建一個(gè)文件夾,命名為你想要的名字(最好是英文,不沖突即可) ,比如 xiaobai:

Paste_Image.png

拷貝 members/_template-advanced 目錄下的 index.html 到 xiaobao 目錄下,并 用編輯器 打開(kāi) members/xiaobai/index.html,
把這三個(gè)地方修改成你的信息,可自由發(fā)揮:

修改前

修改后

修改后記得保存,這樣就做好了你的介紹界面,接下來(lái)我們?cè)谥黜?yè)里添加一個(gè)按鈕鏈接到該頁(yè)面即可,用編輯器打開(kāi)項(xiàng)目根目錄下的 index.html, 按照已有a標(biāo)簽的格式添加一個(gè)a按鈕,把中間的文件夾名稱(chēng)改成你的:

添加一個(gè) a 標(biāo)簽: <a href="members/xiaobai/index.html">小白</a>

保存!大功告成,你可以用瀏覽器打開(kāi)它預(yù)覽啦~

主頁(yè)
小白介紹頁(yè)

還有高級(jí)模板,大家可以試試哦~

4. 逐步提交

接下來(lái)我們要把我們的修改逐層提交上去,提交流程如下,一共3步:

git 提交流程

我們來(lái)一步一步操作!

4.1 把修改提交到本地 git 倉(cāng)庫(kù)

在你的項(xiàng)目目錄里,你可以發(fā)現(xiàn)一個(gè) .git 文件夾(需要顯示 隱藏文件夾 才可以看見(jiàn)),這個(gè)文件夾就是一個(gè)實(shí)質(zhì)性的git本地倉(cāng)庫(kù),里面保存著該項(xiàng)目目錄的版本、分支信息:

Paste_Image.png

首先,我們要把我們對(duì)該目錄所做的修改生成一個(gè)提交(commit),存入本地倉(cāng)庫(kù),分兩小步,原理如下:

提交一個(gè)版本

在項(xiàng)目根目錄打開(kāi)git bash, 首先,我們使用 add 命令 $ git add --all 把所有修改存入暫存區(qū),準(zhǔn)備生成一個(gè)提交。接下來(lái)我們使用commit命令 $ git commit -m "<一些備注>" (如 $ git commit -m "來(lái)自小白的更新")把暫存區(qū)的修改生成一個(gè)提交(commit)。這樣完成了第一步了,你對(duì)項(xiàng)目所做的修改已經(jīng)在本地git倉(cāng)庫(kù)保存成一個(gè)提交版本。

4.2 把本地 git 倉(cāng)庫(kù) 提交到 你的遠(yuǎn)程git 倉(cāng)庫(kù)

接下來(lái),我們把本地 git 倉(cāng)庫(kù) 提交到 你的遠(yuǎn)程git 倉(cāng)庫(kù), 運(yùn)行如下命令
$ git push
因?yàn)槲覀兪怯胔ttps方式連接的,所以需要輸入賬密,請(qǐng)按提示輸入。
(提示,運(yùn)行 $git config --global credential.helper store 可以長(zhǎng)期保存輸入的密碼,下次輸入賬密之后,以后就不用輸入了。)
(雖然https連接方式被號(hào)稱(chēng)比較快,但本人還是推薦使用ssh連接方式,這樣可以不用在電腦保存你的 github 賬密。)

把新的 commit 推送到 遠(yuǎn)程倉(cāng)庫(kù)

這個(gè)操作可以定期完成,如每晚一次,這樣可以大大減少由于你的電腦故障帶來(lái)的代碼損失。

4.3 通過(guò) pull request 把你的遠(yuǎn)程git倉(cāng)庫(kù)更新提交到主git倉(cāng)庫(kù)

當(dāng)你的代碼成功的完成某個(gè)指定的小功能時(shí),你就可以申請(qǐng)把你的新代碼提交到主倉(cāng)庫(kù)了~流程圖如下:

通過(guò) pull request 提交更新

首先,登錄你的github倉(cāng)庫(kù),點(diǎn)擊 “New pull request”:

然后就會(huì)出現(xiàn)一個(gè) 改動(dòng)比較界面,在標(biāo)題下面這一欄選擇合并到哪個(gè)分支,我們選擇 dev :

base fork 選擇 BirdLee/birdylee.github.io, base 選擇 dev

這樣的意思是把你的賬戶下的 birdylee.github.io 倉(cāng)庫(kù)里的 master 分支的更新合并到 BirdLee/birdylee.github.io 的 dev 分支。當(dāng)出現(xiàn) “ Able to merge ” 時(shí),即可自動(dòng)合并,這是你可以直接點(diǎn)擊 " Create pull request "。填入更新說(shuō)明和詳情,即可成功創(chuàng)建 pull request:

Paste_Image.png

這樣項(xiàng)目管理員和其他項(xiàng)目成員就可以清楚的看到你對(duì)項(xiàng)目所做的修改,并進(jìn)行討論或評(píng)論:

pull request 概況
查看變更的代碼

創(chuàng)建 pull request 后,項(xiàng)目管理員就會(huì)收到郵件通知,并開(kāi)始審核你的 pull request。當(dāng)代碼符合要求時(shí),管理員會(huì)接受這個(gè) pull request,這時(shí),你的代碼就被整合到 主 git 倉(cāng)庫(kù),這樣你就對(duì)該項(xiàng)目做出了自己的貢獻(xiàn)了!這時(shí)登錄 http://birdylee.github.io,你就可以看到你專(zhuān)屬的按鈕了 ~

就這樣,我們就跑了一遍git flow工作流,是不是覺(jué)得還挺簡(jiǎn)單的呢~ 整個(gè) git flow,可以總結(jié)為下面這圖:

git工作流 (摘自阮一峰博客)

上面介紹的 git flow 是基本完整的,但為了盡量簡(jiǎn)單,暫時(shí)忽略了諸如 代碼合并沖突定時(shí) rebase 等問(wèn)題,這些問(wèn)題大家當(dāng)遇到時(shí)再學(xué)習(xí)如何操作即可。

你做成功了嗎~?如果有任何疑問(wèn),歡迎在項(xiàng)目的 Issues 提出哦~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容