隨著IT互聯(lián)網(wǎng)行業(yè)的發(fā)展趨勢,Git作為開發(fā)人員的必備技能,網(wǎng)絡(luò)使用Git教程也是多如牛毛,讓閱讀者看的眼花繚亂;所以結(jié)合自己的使用經(jīng)驗和結(jié)合網(wǎng)上一些資料,整理一篇可以供大家快速上手Git,并使用GitLab多人協(xié)同開發(fā)的教程,也算自己對Git的一個總結(jié)吧!
開篇介紹Git
介紹Git的網(wǎng)上基本都一致,我這里就不過多的介紹了,這里我提供一個網(wǎng)上公認(rèn)不錯的Git教程,廖雪峰-Git教程,廖老師的Git教程對基本操作講的很詳細(xì),但是對多人協(xié)同合作開發(fā)講就比較少了。
直入主題
一、基本概念
1、 倉庫(Repository )
-
線上版本倉庫(這里稱為:源倉庫)
- 項目啟動時,由項目管理者搭建起最原始的倉庫,稱 origin。
- 源倉庫的有個作用 :
- 1.匯總參與該項目的各個開發(fā)者的代碼
- 2.存放趨于穩(wěn)定和可發(fā)布的代碼
- 源倉庫應(yīng)該是受保護的,開發(fā)者不應(yīng)該直接對其進行開發(fā)工作。只有項目管理者能對其進行較高權(quán)限的操作。
-
開發(fā)者倉庫 (獨自、本地倉庫)
- 任何開發(fā)者都不會對源倉庫進行直接的操作,源倉庫建立以后,每個開發(fā)者需要做的事情就是把源倉庫的“復(fù)制”一份,作為自己日常開發(fā)的倉庫。這個復(fù)制是Gitlab上面的
Fork
。 - 每個開發(fā)者所
Fork
的倉庫是完全獨立的,互不干擾,甚至與源倉庫都無關(guān)。每個開發(fā)者倉庫相當(dāng)于一個源倉庫實體的影像,開發(fā)者在這個影像中進行編碼,提交到自己的倉庫中,這樣就可以輕易地實現(xiàn)團隊成員之間的并行開發(fā)工作。而開發(fā)工作完成以后,開發(fā)者可以向源倉庫發(fā)送Pull Request
,本地倉庫先合并源倉庫,解決沖突,再發(fā)起Merge Request
請求管理員把自己的代碼合并到源倉庫中的develop
分支,這樣就實現(xiàn)了分布式開發(fā)工作和集中式的管理。
- 任何開發(fā)者都不會對源倉庫進行直接的操作,源倉庫建立以后,每個開發(fā)者需要做的事情就是把源倉庫的“復(fù)制”一份,作為自己日常開發(fā)的倉庫。這個復(fù)制是Gitlab上面的
2、分支(Branch)
-
master branch : 主分支
- master:主分支從項目一開始便存在,它用于存放經(jīng)過測試,已經(jīng)完全穩(wěn)定代碼;在項目開發(fā)以后的任何時刻當(dāng)中,master存放的代碼應(yīng)該是可作為產(chǎn)品供用戶使用的代碼。所以,應(yīng)該隨時保持master倉庫代碼的清潔和穩(wěn)定,確保入庫之前是通過
完全測試
和code reivew
的。master分支是所有分支中最不活躍的,大概每個月或每兩個月更新一次,每一次master更新的時候都應(yīng)該用git打上tag
,來說明產(chǎn)品有新版本發(fā)布。
- master:主分支從項目一開始便存在,它用于存放經(jīng)過測試,已經(jīng)完全穩(wěn)定代碼;在項目開發(fā)以后的任何時刻當(dāng)中,master存放的代碼應(yīng)該是可作為產(chǎn)品供用戶使用的代碼。所以,應(yīng)該隨時保持master倉庫代碼的清潔和穩(wěn)定,確保入庫之前是通過
-
develop branch : 開發(fā)分支
-
develop:開發(fā)分支,一開始從master分支中分離出來,用于開發(fā)者存放基本穩(wěn)定代碼。每個開發(fā)者的倉庫相當(dāng)于源倉庫的一個鏡像,每個開發(fā)者自己的倉庫上也有master和develop。開發(fā)者把功能做好以后,是存放到自己的develop中,當(dāng)測試完以后,可以向管理者發(fā)起一個
Pull Request
,請求把自己倉庫的develop分支
合并到源倉庫的develop
中。所有開發(fā)者開發(fā)好的功能會在源倉庫的develop分支中進行匯總,當(dāng)develop中的代碼經(jīng)過不斷的測試,已經(jīng)逐漸趨于穩(wěn)定了,接近產(chǎn)品目標(biāo)了。這時候,就可以把develop分支合并。到master分支中,發(fā)布一個新版本。注:任何人不應(yīng)該向master直接進行無意義的合并、提交操作。正常情況下,master只應(yīng)該接受develop的合并,也就是說,master所有代碼更新應(yīng)該源于合并develop的代碼。
-
-
feature branch : 功能分支
- feature:功能性分支,是用于開發(fā)項目的功能的分支,是開發(fā)者主要戰(zhàn)斗陣地。開發(fā)者在本地倉庫從develop分支分出功能分支,在該分支上進行功能的開發(fā),開發(fā)完成以后再合并到develop分支上,這時候功能性分支已經(jīng)完成任務(wù),可以刪除。功能性分支的命名一般為feature-"為需要開發(fā)的功能的名稱"。
二、舉例說明
Step 1 : 創(chuàng)建項目,搭建源倉庫
團隊開發(fā),屬于 Group級項目,Namespace使用Group name,Visibility 默認(rèn)Internal。
**Step 2:開發(fā)者Fork源倉庫 **
源倉庫建立以后,每個開發(fā)就可以去克隆一份源倉庫到自己的Gitlab賬號中,然后作為自己開發(fā)所用的倉庫。
**Step 3:把自己的項目倉庫clone到本地 **
$ git clone git@git@123.159.2.190:junting.liu/BizAdmin.git
**Step 4:本地自己構(gòu)建功能分支進行開發(fā) **
假設(shè)我們要開發(fā)一個Vue 表單組件的功能:
# 查看當(dāng)前分支
$ git branch
# 切換`develop`分支
$ git checkout develop
# 切換到一個功能性分支
$ git checkout -b feature-formComponent
# 開發(fā)完畢,先進行當(dāng)前狀態(tài)監(jiān)測
$ git status
# 將開發(fā)好的功能添加到Git暫存區(qū),并沒有提交,這個時候文件是處于工作區(qū)
$ git add .
# 這個時候你可以使用 git status 監(jiān)測下這個時候的狀態(tài)
# 將暫存區(qū)的文件提交下
$ git commit -m "修飾當(dāng)前你進行了什么操作"
# 再次使用git status 監(jiān)測下git的狀態(tài),會提示 當(dāng)前work clean 工作區(qū)很干凈
# 切回develo分支,合并功能分支
$ git checkout develop
$ git merge feature-formComponent
# 合并后,監(jiān)測狀態(tài)、沖突
$ git diff
# 刪除功能性分支
$ git branch -d feature-formComponent
# 拉取自己的遠(yuǎn)程中的develop分支,本地解決沖突
$ git pull origin junting <remote> <branch>
#推送到自己遠(yuǎn)程的倉庫develop分支
$ git push origin develop
# 功能開發(fā)完畢,就要向源倉庫推送自的develop分支
# 先還是要拉取下源倉庫develp分支,本地合并解決沖突
# 這幾步也是跟上兩步一樣的
三、協(xié)同合作中最常用的Git命令
- 本地使用Git,都需要先配置下自己倉庫的郵箱和用戶名,基本只使用一次
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
- 常用命令
- git clone <url> #克隆遠(yuǎn)程版本庫
- git init #初始化本地倉庫
- git status #查看下倉庫的當(dāng)前的狀態(tài)
- git add <file> / . #跟蹤指定文件或所有改動過的文件
- git commit -m "commit message" # 提交所有更新過的文件
- git log #查看提交歷史日志
- git relog #查看所有操作記錄日志,回退穿越很有用
- git reset --hard HEAD # 回退
- git pull <remote> <branch> # 拉取代碼并快速合并
- git push <remote> <branch> # 推送代碼及快速合并
- git fetch <remote> / --all # 獲取指定遠(yuǎn)程倉庫或所有遠(yuǎn)程倉庫代碼
- git merge <branch> # 合并指定分支到當(dāng)前分支
Git常用命令速查表