Git服務(wù)器可以很輕松的搭建在運(yùn)行Linux的機(jī)器上,可以選擇Ubuntu、Debian或者CentOS。同時(shí)可以在服務(wù)器設(shè)置開發(fā)人員的SSH公鑰來實(shí)現(xiàn)免密訪問。
本文使用CentOS 7來作為Git服務(wù)器。
1. 安裝Git
在電腦上打開Git bash,運(yùn)行ssh root@<your git server IP>命令,以root身份ssh登錄Git服務(wù)器,提示登錄密碼時(shí)輸入root用戶的密碼:
$ ssh root@10.0.0.50
...
Last login: ...
[root@localhost ~]#
登陸成功后,運(yùn)行yum install git命令安裝Git:
[root@localhost ~]# yum install git
安裝后運(yùn)行git --version命令驗(yàn)證下:
[root@localhost ~]# git --version
git version 1.8.3.1
安裝成功了。接下來運(yùn)行adduser git命令為Git服務(wù)創(chuàng)建一個(gè)新的用戶:
[root@localhost ~]# adduser git
2. 禁用Git服務(wù)器上git用戶的shell權(quán)限
出于安全考慮,要禁用服務(wù)器上git用戶的shell訪問權(quán)限。繼續(xù)執(zhí)行vi命令設(shè)置shell權(quán)限:
[root@localhost ~]# vi /etc/passwd
vi編輯器打開passwd文件后,按INSERT鍵進(jìn)入編輯狀態(tài),將git:x:1001:1001::/home/git:/bin/bash,修改成git:x:1001:1001::/home/git:/usr/bin/git-shell。修改后鍵入:x回車保存并退出vi編輯器,。
3. 創(chuàng)建Git倉庫
運(yùn)行mkdir命令在Git服務(wù)器上新建Git倉庫目錄:
[root@localhost ~]# mkdir -p /gitrepo/theoneprj.git
目錄創(chuàng)建成功,再運(yùn)行git init --bare命令創(chuàng)建一個(gè)裸庫,亦即沒有工作目錄的Git倉庫:
[root@localhost /]# git init --bare /gitrepo/theoneprj.git
Initialized empty Git repository in /gitrepo/theoneprj.git/
接下來運(yùn)行chown -R命令,將Git倉庫目錄的權(quán)限授權(quán)給git用戶:
[root@localhost /]# chown -R git:git /gitrepo/theoneprj.git
到這里Git倉庫就創(chuàng)建完成了。運(yùn)行exit命令退出root shell:
[root@localhost ~]# exit
logout
Connection to 10.0.0.50 closed.
4. Git用戶訪問授權(quán)
Git通過SSH協(xié)議在網(wǎng)絡(luò)上傳輸數(shù)據(jù)。接下來要做的是為每個(gè)開發(fā)人員在自己的開發(fā)電腦上生成一對(duì)SSH密鑰(private key & public key),然后將自己的公鑰(public key)上傳到Git服務(wù)器。以后開發(fā)人員使用git命令和服務(wù)器交互時(shí)就可以免密直接訪問了。
4.1. 為開發(fā)成員生成SSH密鑰對(duì)
在Git bash中執(zhí)行命令ssh-keygen -t RSA -C "<developer's email>",命令運(yùn)行時(shí)會(huì)要求指定保存密鑰對(duì)的文件、以及用于保護(hù)私鑰的密碼。連續(xù)回車--均采用默認(rèn)設(shè)置生成密鑰對(duì)。密鑰對(duì)文件默認(rèn)保存在C:\Users<當(dāng)前Windows登錄用戶>.ssh文件夾內(nèi)。
$ ssh-keygen -t RSA -C "efreykong@outlook.com" -f ~/.ssh/id_rsa -P ''
Generating public/private RSA key pair.
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.
The key fingerprint is:
SHA256:CWfkVa7vHUj1mQmSW23QmFbo7gcznfr+TJzPrD9RKw0 efreykong@outlook.com
The key's randomart image is:
+---[RSA 2048]----+
(此處省略)
+----[SHA256]-----+
4.2. 將開發(fā)任意的公鑰上傳到Git服務(wù)器
運(yùn)行下列命令:
$ ssh root@10.0.0.50 'mkdir -p /home/git/.ssh && cat >> /home/git/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub
如果提示需要密碼則輸入root用戶的密碼即可。
命令執(zhí)行完成后,測(cè)試一下SSH免密登錄是否成功:
$ ssh git@10.0.0.50
Last login: ...
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 10.0.0.50 closed.
從命令的返回信息可以看到可以登錄了,說明使用git命令時(shí)SSH免密登錄設(shè)置成功(由于禁用了服務(wù)器git用戶賬號(hào)的shell權(quán)限,所以連接被自動(dòng)關(guān)閉了,這是正?,F(xiàn)象)。
到這里私有的Git服務(wù)器就搭建好了,現(xiàn)在開發(fā)人員在自己的電腦上可以通過git clone git@10.0.0.50/gitrepo/theoneprj.git從服務(wù)器克隆Git倉庫到本地了。