一、 前提信息 (入職時(shí)從公司獲取):
- 獲取賬號(hào)和郵箱
公司郵箱 :http://mail.yjf.tech/sclcoder@yjf.tech/***
GitLab 個(gè)人賬號(hào) : git.yjf.tech:sclcoder/***
二、 初始設(shè)置 (一次性設(shè)置工作)
本地個(gè)人工作電腦 git 全局性配置
git config --global user.name "sclcoder"
git config --global user.email "sclcoder@yjf.tech"使用 GIT GUI help 菜單中 Show SSH Key 菜單項(xiàng)對(duì)話框按鈕 Generate Key 生成一對(duì)公鑰私鑰;
這一對(duì)公鑰私鑰用于git 命令行向gitlab服務(wù)器推送文件時(shí)使用;
生成的公鑰私鑰文件保存在工作站當(dāng)前用戶的目錄下 id_rsa 是私鑰, id_rsa.pub 是公鑰;將生成的SSH Key 的公鑰文本添加到gitlab服務(wù)器個(gè)人用戶profile中
GitLab 上個(gè)人用戶 profile中 增加一個(gè)新的 SSH Key 的路徑是 : http://git.yjf.tech/profile/keys
GitLab 上每個(gè)個(gè)人用戶profile 中可以增加多個(gè) SSH Key
三、針對(duì)每個(gè)參與的項(xiàng)目一次性的初始化工作(以參與的項(xiàng)目為 dev 組下的 aita3 為例):
登錄 gitlab fork 參與的項(xiàng)目主庫 http://git.yjf.tech/dev/aita3.git 到自己名下 (這里以名字 sclcoder 為例),這一步驟會(huì)在自己名下生成項(xiàng)目,路徑類似于 http://git.yjf.tech/sclcoder/aita3.git , 其內(nèi)容復(fù)制自 http://git.yjf.tech/dev/aita3.git
將個(gè)人 fork 代碼庫克隆到個(gè)人本地工作電腦git clone http://git.yjf.tech/sclcoder/aita3.git 這一步驟會(huì)在本地當(dāng)前目錄創(chuàng)建目錄 aita3,內(nèi)容是 gitlab服務(wù)器上個(gè)人名下 fork庫的克隆(包含所有分支),我們稱之為本地工作庫
-
本地工作電腦當(dāng)前目錄切換到本地工作庫,并添加遠(yuǎn)程項(xiàng)目主庫為 upstream
cd aita3 git remote add upstream http://git.yjf.tech/dev/aita3.git git remote -v // 查看遠(yuǎn)程 源庫,和 上游庫信息
本地工作電腦切換到工作分支 (如果當(dāng)前默認(rèn)分支已經(jīng)是工作分支,則本步驟不需要,一般情況下當(dāng)前默認(rèn)分支是 master)
下面假設(shè)當(dāng)前默認(rèn)分支是 master,但目標(biāo)工作分支是 dev,所以需要將 remotes/origin/dev checkout 出來成為本地分支 dev
git checkout -b dev remotes/origin/dev ;
四 、項(xiàng)目主庫代碼同步到本地工作庫和遠(yuǎn)程fork庫
在需要獲取主庫最新代碼時(shí)候從遠(yuǎn)程上游主庫獲取主庫最新代碼
git fetch upstream // 從upstream中獲取最新代碼,但是不做任何合并動(dòng)作,此命令不影響當(dāng)前本地工作分支-
將拉到本地的上游庫最新代碼合并到本地當(dāng)前工作分支
git merge upstream/dev // 將upstream分支dev合并到本地當(dāng)前分支
// 注意 : 上面命令假設(shè)本地分支為 dev 并且對(duì)應(yīng)到 upstream/dev, 如果本地分支為 master 并且對(duì)應(yīng) upstream/master, 對(duì)應(yīng)命令行應(yīng)該為 git merge upstream/master
將本地最新的代碼推送到遠(yuǎn)程個(gè)人fork庫
git push
五、 個(gè)人 fork庫代碼同步到項(xiàng)目主庫
一旦本地個(gè)人工作庫中編輯了一些內(nèi)容,經(jīng)過 commit/push 到遠(yuǎn)程個(gè)人fork之后,需要將遠(yuǎn)程個(gè)人fork庫代碼同步到項(xiàng)目主庫,其他人才能看到你最新的代碼變化,這一目的通過在遠(yuǎn)程個(gè)人 fork 庫中創(chuàng)建新的 merge request 并經(jīng)過項(xiàng)目主庫審批人審批通過完成;
遠(yuǎn)程個(gè)人fork庫中創(chuàng)建 merge request
個(gè)人fork庫中創(chuàng)建 merge request 的地址類似于 : http://git.yjf.tech/sclcoder/aita3/merge_requests將創(chuàng)建好的 merge request 發(fā)送給項(xiàng)目主庫審批人
要發(fā)送的 merge request 使用其 URL 地址形式 : http://git.yjf.tech/dev/aita3/merge_requests/5項(xiàng)目主庫審批人 review 代碼和審批 merge request
項(xiàng)目主庫中待審批 merge request 列表的地址類似于 : http://git.yjf.tech/dev/aita3/merge_requests
如果有多個(gè)待審批 merge request 的話,審批人在這個(gè)地址可以看到各個(gè) merge request,
點(diǎn)開某個(gè) merge request (瀏覽器地址欄中URL類似于 : http://git.yjf.tech/dev/aita3/merge_requests/5 ) ,
可以看到 ACCEPT MERGE REQUEST 按鈕,也可以進(jìn)行代碼 review
六、 如果遠(yuǎn)程代碼庫增加分支(例如backup分支),自己遠(yuǎn)程庫已經(jīng)fork對(duì)應(yīng)的遠(yuǎn)程庫代碼了,也就是缺少backup分支,自己本地庫也缺少backup分支,可以如下操作
git fetch upstream (遠(yuǎn)程代碼庫)
git checkout backup (切換本地backup分支,不存在則創(chuàng)建一個(gè))
git merge upstream/backup (遠(yuǎn)程upstream合并到本地backup)
git push origin backup:backup 提交本地backup分支 作為 origin 遠(yuǎn)程的backup分支(git push origin test:master // 提交本地test分支 作為 遠(yuǎn)程的master分支)