前言
新入職公司,發(fā)現(xiàn)公司還在使用落后生產(chǎn)工具 svn赃承,由于重度使用過 svn 和 git ,知道這兩個工具之間的差異,已經(jīng)在使用 git 的路上越走越遠碾篡。
于是,跟上級強烈建議讓我在公司推行 git 和他的私有倉庫 gitlab筏餐,多次安利“磨刀不誤砍柴工”的理念开泽,終于被我說服。
以下是我邊安裝和邊記錄的詳細筆記魁瞪,務(wù)求安裝好之后分享給同事直接就能看懂穆律,降低團隊的學習成本。
git的優(yōu)點
- git是分布式的导俘,svn不是
git分布式本地就可以用峦耘,可以隨便保存各種歷史痕跡,不用擔心污染服務(wù)器旅薄,連不上服務(wù)器也能提交代碼辅髓、查看log。 - GIT分支和SVN的分支不同
分支在SVN中實際上是版本庫中的一份copy少梁,而git一個倉庫是一個快照洛口,所以git 切換、合并分支等操作更快速凯沪。 - git有一個強大的代碼倉庫管理系統(tǒng) - gitlab
可以很方便的管理權(quán)限第焰、代碼review,創(chuàng)建妨马、管理project
GitLab介紹
GitLab:是一個基于Git實現(xiàn)的在線代碼倉庫托管軟件挺举,你可以用gitlab自己搭建一個類似于Github一樣的系統(tǒng),一般用于在企業(yè)烘跺、學校等內(nèi)部網(wǎng)絡(luò)搭建git私服湘纵。
功能:Gitlab 是一個提供代碼托管、提交審核和問題跟蹤的代碼管理平臺液荸。對于軟件工程質(zhì)量管理非常重要瞻佛。
版本:GitLab 分為社區(qū)版(CE) 和企業(yè)版(EE)。
配置:建議CPU2核娇钱,內(nèi)存2G以上伤柄。
Gitlab的服務(wù)構(gòu)成:
Nginx:靜態(tài)web服務(wù)器。
gitlab-shell:用于處理Git命令和修改authorized keys列表文搂。(Ruby)
gitlab-workhorse: 輕量級的反向代理服務(wù)器适刀。(go)
GitLab Workhorse是一個敏捷的反向代理。它會處理一些大的HTTP請求煤蹭,比如文件上傳笔喉、文件下載取视、Git push/pull和Git包下載。其它請求會反向代理到GitLab Rails應(yīng)用常挚,即反向代理給后端的unicorn作谭。
logrotate:日志文件管理工具。
postgresql:數(shù)據(jù)庫奄毡。
redis:緩存數(shù)據(jù)庫折欠。
sidekiq:用于在后臺執(zhí)行隊列任務(wù)(異步執(zhí)行)。(Ruby)
unicorn:An HTTP server for Rack applications吼过,GitLab Rails應(yīng)用是托管在這個服務(wù)器上面的锐秦。(Ruby Web Server,主要使用Ruby編寫)
GitLab安裝
1.源碼安裝
2.yum安裝
官方源地址:https://about.gitlab.com/downloads/#centos6
清華大學鏡像源:https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce
新建 /etc/yum.repos.d/gitlab_gitlab-ce.repo,內(nèi)容為:
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
安裝依賴
sudo yum install curl openssh-server openssh-clients postfix cronie
sudo service postfix start
sudo chkconfig postfix on
#這句是用來做防火墻的盗忱,避免用戶通過ssh方式和http來訪問酱床。
sudo lokkit -s http -s ssh
再執(zhí)行
sudo yum makecache
sudo yum install gitlab-ce
sudo gitlab-ctl reconfigure #Configure and start GitLab
配置域名: vim /var/opt/gitlab/nginx/conf/gitlab-http.conf
# 外網(wǎng)訪問的端口,如果服務(wù)器已經(jīng)有服務(wù)器占用了80趟佃,那么這里可以改成其它
listen *:8888;
server_name gitlab.test.domain.com;
set $http_host_with_default "gitlab.test.domain.com:8888";
補充說明:因為編譯gitlab的配置 /etc/gitlab/gitlab.rb 時會重新生成這個自定義nginx 配置扇谣,所以只要 gitlab 的配置配得好,上面的nginx其實不需要自定義的揖闸。
修改密碼
gitlab-rails console production
user = User.where(id:1).first
user.password='123456'
user.save!
GitLab備份和恢復
備份
# 可以將此命令寫入crontab揍堕,以實現(xiàn)定時備份
/usr/bin/gitlab-rake gitlab:backup:create
備份的數(shù)據(jù)會存儲在/var/opt/gitlab/backups,用戶通過自定義參數(shù) gitlab_rails['backup_path']汤纸,改變默認值衩茸。
恢復
# 停止unicorn和sidekiq,保證數(shù)據(jù)庫沒有新的連接贮泞,不會有寫數(shù)據(jù)情況
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
# 進入備份目錄進行恢復楞慈,1476900742為備份文件的時間戳
cd /var/opt/gitlab/backups
gitlab-rake gitlab:backup:restore BACKUP=1476900742
cd -
# 啟動unicorn和sidekiq
sudo gitlab-ctl start unicorn
sudo gitlab-ctl start sidekiq
GitLab配置文件修改
vim /etc/gitlab/gitlab.rb
gitlab基本配置:
#外部訪問url(經(jīng)過編譯后,自動將這個配置編譯到nginx配置啃擦,nginx就無需配置了)
external_url 'http://gitlab.test.domain.com:8888'
#默認值就是8080囊蓝。如果端口被占用,可將8080修改為其它(例如:9090)
unicorn['port'] = 8080
gitlab發(fā)送郵件配置
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = “smtp.exmail.qq.com”
gitlab_rails['smtp_port'] = 25
gitlab_rails['smtp_user_name'] = “huangdc@domain.com“
gitlab_rails['smtp_password'] = "smtp password"
gitlab_rails['smtp_authentication']= “plain"
gitlab_rails['smtp_enable_starttls_auto']= true
gitlab_rails['gitlab_email_from']= 'huangdc@domain.com'
gitlab_rails['gitlab_email_reply_to']= ‘noreply@domain.com'
服務(wù)器修改過ssh端口的坑(需要修改配置ssh端口)
#修改過ssh端口令蛉,gitlab中項目的的ssh地址聚霜,會在前面加上協(xié)議頭和端口號“ssh://git@gitlab.domain.com:55725/huangdc/test.git”
gitlab_rails['gitlab_shell_ssh_port'] = 55725
配置生效
#使配置生效
gitlab-ctl reconfigure
#重新啟動GitLab
gitlab-ctl restart
GitLab常用命令
gitlab-ctl start # 啟動所有 gitlab 組件;
gitlab-ctl stop # 停止所有 gitlab 組件珠叔;
gitlab-ctl restart # 重啟所有 gitlab 組件蝎宇;
gitlab-ctl status # 查看服務(wù)狀態(tài);
vim /etc/gitlab/gitlab.rb # 修改gitlab配置文件祷安;
gitlab-ctl reconfigure # 重新編譯gitlab的配置姥芥;
gitlab-rake gitlab:check SANITIZE=true --trace # 檢查gitlab;
gitlab-ctl tail # 查看日志汇鞭;
gitlab-ctl tail nginx/gitlab_access.log
注意:執(zhí)行 reconfigure 命令會把gitlab的nginx組件的配置還原凉唐,導致自定義修改的端口以及域名等都沒有了庸追。
常用目錄
日志地址:/var/log/gitlab/ # 對應(yīng)各服務(wù)的打印日志
服務(wù)地址:/var/opt/gitlab/ # 對應(yīng)各服務(wù)的主目錄
查看gitlab版本
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
新建項目
使用root用戶登錄進gitlab會后,點擊“new project“創(chuàng)建一個項目台囱,比如項目命名為“kuaijiFirstProject”淡溯。
然后會發(fā)現(xiàn),硬盤上已經(jīng)生成了一個git文件:
/var/opt/gitlab/git-data/repositories/root/kuaijiFirstProject.git
漢化
https://gitlab.com/xhang/gitlab.git
gitlab的使用
ssh -T -p 55725 git@gitlab.domain.com
注意:<fornt style="color:red">以上這條 ssh 命令測試通過玄坦,未必代表就能 git clone 代碼血筑,git clone 代碼需要執(zhí)行命令的賬戶有寫權(quán)限,如果是普通用戶用 sudo git clone 那么 git 就會使用的 root 賬號的 Private Key煎楣。 </fornt>
1.登錄
管理員會為使用者開通賬號并設(shè)置權(quán)限。
2.使用者在客戶端生成ssh key
參考文章: http://www.reibang.com/p/142b3dc8ae15
ssh-keygen -t rsa -C "huangdc@domain.com"
3.將公鑰的內(nèi)容copy到gitlab用戶設(shè)置里面的“SSH Keys”
Windows: clip < ~/.ssh/id_rsa.pub
Mac: pbcopy < ~/.ssh/id_rsa.pub
GNU/Linux (requires xclip): xclip -sel clip < ~/.ssh/id_rsa.pub
4.測試ssh連接
#標準測試代碼:ssh -T git@gitlab.com
ssh -T -p 55725 git@gitlab.domain.com #修改過端口號的測試代碼
如果連接成功的話车伞,會出現(xiàn)以下信息:
Welcome to GitLab, huangdc!
說明:實際上執(zhí)行這條ssh命令择懂,所使用的遠程服務(wù)器的用戶是git,這個用戶是在安裝gitlab的時候生成的另玖,所有使用gitlab服務(wù)器的ssh客戶端困曙,都是使用git這個用戶。在這里的用戶“huangdc”是通過gitlab創(chuàng)建的谦去,是用于gitlab的權(quán)限管理慷丽,也用作標識提交代碼的開發(fā)者信息,不要跟ssh的用戶混淆了鳄哭。
如何使用多個SSH公鑰(自己電腦在使用多個代碼倉庫)
原理其實是:因為每個倉庫都需要 ssh 連接要糊,而 ssh 命令默認是使用 .ssh 目錄下面的私鑰去連接代碼倉庫,所以我們可以在 .ssh/config 目錄里面針對不同的倉庫域名重定義它的私鑰妆丘。
例子如下:
編輯文件: vim /Users/david/.ssh/config
Host gitlab.domain.com
IdentityFile /Users/david/.ssh/id_rsa
命令行環(huán)境下初始化項目
- 首先在 gitlab 上面創(chuàng)建一個空的代碼倉庫锄俄,得到倉庫地址如下:
ssh://git@gitlab.domain.com:55725/huangdc/test.git
- 在本地初始化倉庫、提交代碼勺拣、推送到遠程 master 分支奶赠。
git clone ssh://git@gitlab.domain.com:55725/huangdc/test.git
cd test
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
命令行環(huán)境下遷移舊的項目
- 首先在 gitlab 上面創(chuàng)建一個空的代碼倉庫,得到倉庫地址如下:
#注意:已存在代碼的舊項目只能推送到空的遠程代碼倉庫
ssh://git@gitlab.domain.com:55725/dev/memberApi.git
- 本地初始化項目药有、關(guān)聯(lián)遠程倉庫毅戈、推送到遠程倉庫
cd /Users/david/work_www/memberApi
git init
git remote add origin ssh://git@gitlab.domain.com:55725/dev/memberApi.git
git push -u origin master
SourceTree的安裝和打開
- 官網(wǎng)下載鏈接:https://www.sourcetreeapp.com/
- 打開SourceTree之后,需要登錄Atlassian賬號來激活SourceTree愤惰∥可以使用Google賬號直接關(guān)聯(lián)登錄。
- 登錄后還需要一些設(shè)置羊苟,以最簡單的方式跳過就行塑陵。
Git Flow
http://flc.ren/2015/12/381.html
備注
這篇文章主要記錄如何安裝和使用 GitLab ,晚點再分享一篇講解分支模型策略的文章蜡励。