在linux系統中我們可以直接使用Gitolite 搭建 Git 服務器了,下面本文章就給各位介紹詳細的配置過程,希望能幫助到大家。
一般來說,配置git服務器的話,需要一臺服務器,還需要一個客戶端來驗證服務器是否搭建成功,而一般開發者基本都只有一臺服務器,那就需要這臺服務器既作為Git的服務器,又要作為客戶端來使用了,下面的教程就是以服務器和客戶端都是同一臺服務器為例的。如果需要服務器和客戶端分開的話,只需要將下面列出的服務器端和客戶端的操作到相應的機器上操作就可以了。
第一步,服務器端創建git服務器專用賬戶,賬戶名字就叫git吧,創建之后為其設置密碼,代碼如下:
- # useradd -m -s /bin/bash git
- # passwd git
- Enter new UNIX password:
- Retype new UNIX password:
- passwd: password updated successfully
切換到git用戶,在家目錄/home/git下創建安裝目錄bin,代碼如下:
- root@letuknowit:~# su - git
- git@letuknowit:~$ mkdir bin
- git@letuknowit:~$ ll
- total 24
- drwxr-xr-x 3 git git 4096 Aug 20 10:38 ./
- drwxr-xr-x 8 root root 4096 Aug 20 10:36 ../
- -rw-r--r-- 1 git git 220 Apr 3 2012 .bash_logout
- -rw-r--r-- 1 git git 3486 Apr 3 2012 .bashrc
- drwxrwxr-x 2 git git 4096 Aug 20 10:38 bin/
- -rw-r--r-- 1 git git 675 Apr 3 2012 .profile
獲取 Gitolite 并安裝,gitolite要安裝在服務器端,安裝之前要保證系統上已經安裝了git,代碼如下:
- git@letuknowit:~$ git clone git://github.com/sitaramc/gitolite
- Cloning into 'gitolite'...
- remote: Counting objects: 8682, done.
- remote: Total 8682 (delta 0), reused 0 (delta 0)
- Receiving objects: 100% (8682/8682), 3.61 MiB | 33 KiB/s, done.
- Resolving deltas: 100% (4917/4917), done.
- git@letuknowit:~$ ll
- total 28
- drwxr-xr-x 4 git git 4096 Aug 20 10:40 ./
- drwxr-xr-x 8 root root 4096 Aug 20 10:36 ../
- -rw-r--r-- 1 git git 220 Apr 3 2012 .bash_logout
- -rw-r--r-- 1 git git 3486 Apr 3 2012 .bashrc
- drwxrwxr-x 2 git git 4096 Aug 20 10:38 bin/
- drwxr-xr-x 6 git git 4096 Aug 20 10:40 gitolite/
- -rw-r--r-- 1 git git 675 Apr 3 2012 .profile
- git@letuknowit:~$ gitolite/install -ln
- git@letuknowit:~$ ll
- total 28
- drwxr-xr-x 4 git git 4096 Aug 20 10:40 ./
- drwxr-xr-x 8 root root 4096 Aug 20 10:36 ../
- -rw-r--r-- 1 git git 220 Apr 3 2012 .bash_logout
- -rw-r--r-- 1 git git 3486 Apr 3 2012 .bashrc
- drwxrwxr-x 2 git git 4096 Aug 20 10:44 bin/
- drwxr-xr-x 6 git git 4096 Aug 20 10:40 gitolite/
- -rw-r--r-- 1 git git 675 Apr 3 2012 .profile
第二步,客戶端,創建 Gitolite 服務器管理員用戶,并創建管理員用戶密鑰.
因為我們是在同一臺服務器上,直接exit退回到root用戶,之后變身為客戶端模式,如果客戶端和服務器分開的話,不需要exit指令了,直接在客戶端執行添加用戶的指令就可以了,這里的Gitolite服務器管理員用戶名我們叫gitAdmin,代碼如下:
- git@letuknowit:~$ exit
- logout
- root@letuknowit:~# useradd -m -s /bin/bash gitAdmin
- root@letuknowit:~# passwd gitAdmin
- Enter new UNIX password:
- Retype new UNIX password:
- passwd: password updated successfully
切換到gitAdmin用戶,創建用戶密鑰,代碼如下:
- root@letuknowit:~# su - gitAdmin
- gitAdmin@letuknowit:~$ mkdir .ssh
- gitAdmin@letuknowit:~$ ll
- total 24
- drwxr-xr-x 3 gitAdmin gitAdmin 4096 Aug 20 10:48 ./
- drwxr-xr-x 9 root root 4096 Aug 20 10:46 ../
- -rw-r--r-- 1 gitAdmin gitAdmin 220 Apr 3 2012 .bash_logout
- -rw-r--r-- 1 gitAdmin gitAdmin 3486 Apr 3 2012 .bashrc
- -rw-r--r-- 1 gitAdmin gitAdmin 675 Apr 3 2012 .profile
- drwxrwxr-x 2 gitAdmin gitAdmin 4096 Aug 20 10:48 .ssh/
- gitAdmin@letuknowit:~$ ssh-keygen -f .ssh/gitAdmin
- Generating public/private rsa key pair.
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- Your identification has been saved in .ssh/gitAdmin.
- Your public key has been saved in .ssh/gitAdmin.pub.
- The key fingerprint is:
- 84:a0:9d:d6:c6:43:57:0e:22:cd:67:97:8e:03:be:09 gitAdmin@letuknowit
- The key's randomart image is:
- +--[ RSA 2048]----+
- | ooo o... |
- | o B++ooo |
- | . +.*+.+. |
- | .E..oo . |
- | . oS. |
- | o |
- | |
- | |
- | |
- +-----------------+
接下來將管理員公鑰(gitAdmin.pub)復制 到服務器上的 git 用戶的家目錄下,因為我們這個服務器和客戶端是在一起的,所以就方便了,如果是兩臺機器的話,你可能要想點辦法去拷貝這個文件了,代碼如下:
- gitAdmin@letuknowit:~$ exit
- logout
- root@letuknowit:~# cp /home/gitAdmin/.ssh/gitAdmin.pub /home/git/
- root@letuknowit:~# ll /home/git
- total 36
- drwxr-xr-x 4 git git 4096 Aug 20 10:53 ./
- drwxr-xr-x 9 root root 4096 Aug 20 10:46 ../
- -rw------- 1 git git 788 Aug 20 10:45 .bash_history
- -rw-r--r-- 1 git git 220 Apr 3 2012 .bash_logout
- -rw-r--r-- 1 git git 3486 Apr 3 2012 .bashrc
- drwxrwxr-x 2 git git 4096 Aug 20 10:44 bin/
- -rw-r--r-- 1 root root 412 Aug 20 10:53 gitAdmin.pub
- drwxr-xr-x 6 git git 4096 Aug 20 10:40 gitolite/
- -rw-r--r-- 1 git git 675 Apr 3 2012 .profile
第三步,服務器端配置 Gitolite 服務器,再回到服務器端,用從客戶端復制過來的 Gitolite 管理員用戶公鑰,gitAdmin.pub,配置 Gitolite 服務器,代碼如下:
- root@letuknowit:~# su - git
- git@letuknowit:~$ gitolite setup -pk gitAdmin.pub
- Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
- Initialized empty Git repository in /home/git/repositories/testing.git/
- WARNING: /home/git/.ssh missing; creating a new one
- (this is normal on a brand new install)
- WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
- (this is normal on a brand new install)
- git@letuknowit:~$ ll
- total 60
- drwxr-xr-x 7 git git 4096 Aug 20 10:57 ./
- drwxr-xr-x 9 root root 4096 Aug 20 10:46 ../
- -rw------- 1 git git 788 Aug 20 10:45 .bash_history
- -rw-r--r-- 1 git git 220 Apr 3 2012 .bash_logout
- -rw-r--r-- 1 git git 3486 Apr 3 2012 .bashrc
- drwxrwxr-x 2 git git 4096 Aug 20 10:44 bin/
- -rw-r--r-- 1 root root 412 Aug 20 10:53 gitAdmin.pub
- drwxr-xr-x 6 git git 4096 Aug 20 10:40 gitolite/
- drwx------ 6 git git 4096 Aug 20 10:57 .gitolite/
- -rw------- 1 git git 6662 Aug 20 10:57 .gitolite.rc
- -rw-r--r-- 1 git git 675 Apr 3 2012 .profile
- -rw------- 1 git git 12 Aug 20 10:57 projects.list
- drwx------ 4 git git 4096 Aug 20 10:57 repositories/
- drwx------ 2 git git 4096 Aug 20 10:57 .ssh/
你會看到在git用戶的家目錄下多了很多的文件夾,具體請看上面ll命令的結果.
第四步,客戶端驗證Gitolite管理員賬戶訪問服務器的別名以及驗證別名是否成功,代碼如下:
- git@letuknowit:~$ exit
- logout
- root@letuknowit:~# su - gitAdmin
- gitAdmin@letuknowit:~$ ll .ssh/
- total 16
- drwxrwxr-x 2 gitAdmin gitAdmin 4096 Aug 20 10:49 ./
- drwxr-xr-x 3 gitAdmin gitAdmin 4096 Aug 20 10:53 ../
- -rw------- 1 gitAdmin gitAdmin 1679 Aug 20 10:49 gitAdmin
- -rw-r--r-- 1 gitAdmin gitAdmin 412 Aug 20 10:49 gitAdmin.pub
- gitAdmin@letuknowit:~$ vi .ssh/config
切換到gitAdmin賬戶,在.ssh文件夾下新建config文件,輸入下面內容:
- host git
- user git
- hostname xxx.xxx.xxx.xxx
- port 22
- identityfile ~/.ssh/gitAdmin
host:隨便定義,用于客戶端標識所連接服務端的名字;
user:ssh登錄服務器的賬戶,就是服務器端的那個git專用賬戶的用戶名;
hostname:服務器主機名,或者直接填寫服務器 IP 地址;
port:服務器的ssh訪問端口,默認22;
identityfile:管理員登錄服務器所使用的驗證密鑰;
使用服務器別名從 Gitolite 服務器 clone Gitolite 服務器管理倉庫 gitolite-admin,驗證別名配置是否成功,代碼如下:
- gitAdmin@letuknowit:~$ git clone git:gitolite-admin
- Cloning into 'gitolite-admin'...
- The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
- ECDSA key fingerprint is c1:c2:6a:7a:68:c8:e5:a6:87:f4:9b:95:d5:fd:ff:09.
- Are you sure you want to continue connecting (yes/no)? yes
- Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts. --Vevb.com
- remote: Counting objects: 6, done.
- remote: Compressing objects: 100% (4/4), done.
- Receiving objects: 100% (6/6), 763 bytes, done.
- remote: Total 6 (delta 0), reused 0 (delta 0)
第五步,客戶端給普通用戶創建訪問 Gitolite 服務器的密鑰.
系統里已經有一個kris的賬戶了,如果沒有的話,可以自己創建一個,名字隨便取,先通過ssh-keygen創建密鑰,代碼如下:
- gitAdmin@letuknowit:~$ exit
- logout
- root@letuknowit:~# su - kris
- kris@letuknowit:~$ ssh-keygen -f .ssh/kris
- Generating public/private rsa key pair.
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- Your identification has been saved in .ssh/kris.
- Your public key has been saved in .ssh/kris.pub.
- The key fingerprint is:
- 18:7c:21:e8:7b:4c:2a:d9:b2:e2:eb:db:5b:94:65:49 kris@letuknowit
- The key's randomart image is:
- +--[ RSA 2048]----+
- | ..E. |
- | ...... |
- | . o+. |
- | . =+ |
- | o B. S |
- | + = o |
- | + o |
- |. o . |
- |o*oo. |
- +-----------------+
- kris@letuknowit:~$ ll .ssh/
- total 20
- drwx------ 2 kris kris 4096 Aug 20 11:22 ./
- drwxr-xr-x 9 kris kris 4096 Aug 20 09:56 ../
- -rw-r--r-- 1 kris kris 442 Nov 20 2013 known_hosts
- -rw------- 1 kris kris 1679 Aug 20 11:22 kris
- -rw-r--r-- 1 kris kris 410 Aug 20 11:22 kris.pub
復制用戶公鑰(kris.pub)給 Gitolite 管理員(gitAdmin),代碼如下:
- kris@letuknowit:~$ exit
- logout
- root@letuknowit:~# cp /home/kris/.ssh/kris.pub /home/gitAdmin/gitolite-admin/keydir/
- root@letuknowit:~# ll !$
- ll /home/gitAdmin/gitolite-admin/keydir/
- total 16
- drwxrwxr-x 2 gitAdmin gitAdmin 4096 Aug 20 12:09 ./
- drwxr-xr-x 5 gitAdmin gitAdmin 4096 Aug 20 11:19 ../
- -rw-rw-r-- 1 gitAdmin gitAdmin 412 Aug 20 11:19 gitAdmin.pub
- -rw-r--r-- 1 root root 410 Aug 20 12:09 kris.pub
使用公鑰(kris.pub)為用戶 kris 創建一個他能訪問的 Git 倉庫,代碼如下:
- gitAdmin@letuknowit:~/gitolite-admin$ git add .
- gitAdmin@letuknowit:~/gitolite-admin$ git status -s
- M conf/gitolite.conf
- A keydir/kris.pub
- gitAdmin@letuknowit:~/gitolite-admin$ git commit -m "add user kris by kris.git and create a repo letu for it"
- *** Please tell me who you are.
- Run
- git config --global user.email "you@example.com"
- git config --global user.name "Your Name"
- to set your account's default identity.
- Omit --global to set the identity only in this repository.
- fatal: empty ident <gitAdmin@letuknowit.(none)> not allowed
這里需要先配置下用戶名和email,否則會給出錯誤提示,代碼如下:
- gitAdmin@letuknowit:~/gitolite-admin$ git config --global user.email "xxx@163.com"
- gitAdmin@letuknowit:~/gitolite-admin$ git config --global user.name "kris"
- gitAdmin@letuknowit:~/gitolite-admin$ git commit -m "add user kris by kris.git and create a repo letu for it"
- [master ef0bde9] add user kris by kris.git and create a repo letu for it
- 2 files changed, 4 insertions(+)
- create mode 100644 keydir/kris.pub
- gitAdmin@letuknowit:~/gitolite-admin$ git status
- # On branch master
- # Your branch is ahead of 'origin/master' by 1 commit.
- #
- nothing to commit (working directory clean)
- gitAdmin@letuknowit:~/gitolite-admin$ git push origin master
- Counting objects: 10, done.
- Delta compression using up to 2 threads.
- Compressing objects: 100% (5/5), done.
- Writing objects: 100% (6/6), 840 bytes, done.
- Total 6 (delta 0), reused 0 (delta 0)
- remote: Initialized empty Git repository in /home/git/repositories/letu.git/
- To git:gitolite-admin
- b19c84d..ef0bde9 master -> master
切換到擁有私鑰(~/.ssh/kris)的用戶 kris,嘗試使用私鑰 clone “letu”這個git庫,代碼如下:
- gitAdmin@letuknowit:~/gitolite-admin$ exit
- logout
- root@letuknowit:~# su - kris
- kris@letuknowit:~$ ll .ssh/
- total 20
- drwx------ 2 kris kris 4096 Aug 20 11:22 ./
- drwxr-xr-x 9 kris kris 4096 Aug 20 09:56 ../
- -rw-r--r-- 1 kris kris 442 Nov 20 2013 known_hosts
- -rw------- 1 kris kris 1679 Aug 20 11:22 kris
- -rw-r--r-- 1 kris kris 410 Aug 20 11:22 kris.pub
- kris@letuknowit:~$ vi .ssh/config
為了方便,我們這里也給kris用戶配置一個訪問別名,輸入以下內容后保存,代碼如下:
- host kris
- user git
- hostname xxx.xxx.xxx.xxx
- port 22
- identityfile ~/.ssh/kris
下面就可以clone 之前添加的letu這個git庫了,代碼如下:
- kris@letuknowit:~/$ git clone kris:letu
- Cloning into 'letu'...
- warning: You appear to have cloned an empty repository.
- kris@letuknowit:~$ cd letu/
- kris@letuknowit:~/letu$ git status
- # On branch master
- #
- # Initial commit
- #
- nothing to commit (create/copy files and use "git add" to track)
- kris@letuknowit:~/letu$ echo "Hello git" > init.txt
- kris@letuknowit:~/letu$ git add .
- kris@letuknowit:~/letu$ git status .
- # On branch master
- #
- # Initial commit
- #
- # Changes to be committed:
- # (use "git rm --cached ..." to unstage)
- #
- # new file: init.txt
- #
- kris@letuknowit:~/letu$ git commit -m "Init repo"
- kris@letuknowit:~/letu$ git push origin master
新聞熱點
疑難解答