1. GitLab 簡介
1.1 GitLab基本概念
- GitLab 是一個用于倉庫管理系統(tǒng)的開源項目。使用Git作為代碼管理工具,并在此基礎(chǔ)上搭建起來的web服務(wù)。
- 可通過Web界面進(jìn)行訪問公開的或者私人項目。它擁有與Github類似的功能,能夠瀏覽源代碼,管理缺陷和注釋。
- 可以管理團(tuán)隊對倉庫的訪問,它非常易于瀏覽提交過的版本并提供一個文件歷史庫。
補(bǔ)充 Git、Gitlab與Github區(qū)別
- Git 是一種版本控制系統(tǒng),是一個命令,是一種工具
- Github,Gitlab等產(chǎn)品都是第三方基于git這項技術(shù)開發(fā)的
- Github 是一個基于git實現(xiàn)的在線代碼倉庫,包含一個網(wǎng)站界面,向互聯(lián)網(wǎng)開放
- Gitlab 是一個基于git實現(xiàn)的在線代碼倉庫軟件,你可以用gitlab自己搭建一個類似于github一樣的系統(tǒng),一般用于在企業(yè)、學(xué)校等內(nèi)部網(wǎng)絡(luò)搭建git私服
1.2 GitLab的倉庫與角色
- Gitlab中有四種角色:Owner、Master、Developer、Reporter。
- Gitlib中有兩種倉庫:普通倉庫、Stag/Done庫
區(qū)分方法:
命名為Publish/...._stag,即為stag庫,命名為Publish/…._done,即為done庫,其他則為普通庫。
1.2.1 普通庫與角色權(quán)限
普通庫之前互不可見,一個倉庫中各角色權(quán)限如下:
| 角色 | 人員 | 權(quán)限 |
|---|---|---|
| Owner | 管理員 | 1. 建立倉庫; 2. 為倉庫指定master; 3. 讀寫權(quán)限; |
| Master | Master | 1. 指定該倉庫下的開發(fā)角色; 2. merge分支代碼到主干,對主干代碼有讀寫權(quán)限; 3. 維護(hù)倉庫,如遷移庫、重命名等; |
| Developer | 開發(fā)人員 | 1. check in 本地代碼到分支; 2. 修改分支代碼; 3. 對分支代碼有讀寫權(quán)限,對主干分支有讀權(quán)限; |
| Reporter | 測試人員 | 1. 對主干和分支代碼有讀權(quán)限。 |
1.2.2 stag/done庫與角色權(quán)限
- stag/done庫這兩種庫分別存放stag環(huán)境與生產(chǎn)環(huán)境的package。
- 除管理員外和管理員指定人員外有讀寫權(quán)限之外,其他角色不可見
2. Windows安裝GitLab客戶端
- 在Windows下安裝Git客戶端軟件,下載鏈接
- 安裝Git客戶端:
(1)雙擊圖標(biāo), 然后按默認(rèn)選項安裝即可。
(2)安裝完成后,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的
????東西,就說明Git安裝成功!
3. GitLab的使用
3.1 GitLab客戶端的使用
本地倉庫由git維護(hù)的三棵“樹”組成。
- 第一個是工作目錄,它持有實際文件;
- 第二個是緩存區(qū)(Index),它像個緩存區(qū)域,臨時保存你的改動;
- 第三個是HEAD,指向最近一次提交后的結(jié)果。
常用命令總結(jié)
- 從工作目錄到緩存區(qū)(index):git add <filename> 或git add .
- 提交改動(從index到HEAD):git commit –m "代碼提交信息"
- 從本地倉庫到遠(yuǎn)端倉庫:git push origin master,可以把master換成想要推送的任何分支
分支
(1) 創(chuàng)建分支并切換到該分支
??????git checkout -b <branch>
??????等同于:
??????git branch <branch>
??????git checkout <branch>
(2) 切回主分支:git checkout master
(3) 刪掉分支:git branch -d <branch>
(4) 除非你將分支推送到git服務(wù)器,不然該分支其他人look不到
??????git push origin <branch>
更新與合并
(1) 從git服務(wù)器上更新本地倉庫:git pull
??????等同于:git fetch;git merge
(2) 要合并其他分支到你的當(dāng)前分支:git merge <branch>以上兩種情況,git都會嘗試去自動合并改動。
若存在沖突(conflicts),則自動合并失敗,此時只能靠人肉合并沖突。git diff <source_branch> <target_branch> 查看沖突并分析解決
git add <filename>
標(biāo)簽(tag)
標(biāo)簽可以針對某一時間點的版本做標(biāo)記,常用于版本發(fā)布。
(1) 添加標(biāo)簽:git tag –a ${tagname} -m “版本發(fā)布信息”
(2) 切換到標(biāo)簽:git checkout ${tagname}
(3) 提交到git服務(wù)器:git push origin ${tagname}
替換本地改動
假如你想要丟棄你所有的本地改動與提交,可以到服務(wù)器上獲取最新的版本并將你本地主分支指向到它:
??????git fetch origin
??????git reset --hard origin/master
3.2 關(guān)聯(lián)遠(yuǎn)程倉庫
本地Git倉庫和GitLab倉庫之間的傳輸是通過SSH加密的
3.2.1 GitLab客戶端的準(zhǔn)備
3.2.1.1 設(shè)置用戶信息
單個代碼庫的用戶信息:
查看
git config --get user.name
git config --get user.email
設(shè)置
git config user.name
git config user.email
全局的用戶信息:
查看
git config --global --get user.name
git config --global --get user.email
設(shè)置
git config --global user.name
git config --global user.email
注意事項
- windows中的換行符為 CRLF, 而在Linux下的換行符為LF
- 可使用
git config --list查看所有配置信息,若存在core.autocrlf=true,則使用git config --global core.autocrlf false禁止自動換行
3.2.1.2 創(chuàng)建SSH Key
創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key
ssh-keygen -t rsa -C "youremail@example.com"
- 測試SSH Key是否成功:ssh -T git@server_name
- 如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件
- id_rsa是私鑰,不能泄露出去;id_rsa.pub是公鑰,用$cat id_rsa.pub查看key
3.2.2 GitLab服務(wù)器的準(zhǔn)備



4. 建立倉庫,踏上開發(fā)
全局設(shè)置
git config --global user.name "qianqian.wu吳倩倩"
git config --global user.email "wu.qianqian@chinaredstar.com"
4.1 建Git倉庫
(1) 先在本地建倉庫,再推送至遠(yuǎn)端服務(wù)器
cd workspace
git init
git remote add origin git@server_name:group/component.git
git add .
git commit
git push -u origin master
(2) 本地已存在git倉庫
cd existing_repo
git remote add origin git@server_name:group/component.git
git push -u origin --all
git push -u origin --tags
(3) 從遠(yuǎn)端服務(wù)器克隆倉庫到本地
git clone git@server_name:group/component.git
cd component
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
注意事項
- 如果git庫里有多個分支的話,下載的時候需要加上--bare,完整格式為
- git clone –bare git@server_name:group/component.git
下載完成后可以進(jìn)入目錄,使用git branch查看有多少分支,使用git tag查看有多少tags。
(4) 多次從遠(yuǎn)端更新本地倉庫
cd workspace #workspace是工作目錄
[ -d ".git" ] || git clone ${git_repository} .
git remote update origin --prune #更新原來已有的
git fetch #拉取遠(yuǎn)程倉庫的
git branch -a #展現(xiàn)分支以及分支的詳細(xì)內(nèi)容(remotes/origin/下的所有內(nèi)容)
git checkout -f ${TAG}