一般来说,配置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. 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
转载请注明:知识蚂蚁 » Linux系统使用Gitolite 搭建 Git 服务器详解(服务器和客户端可以为同一台机器)