GIT服务器搭建 gitosis 篇 系列1

本篇文章记录了自己搭建GIT服务器的过程,git服务器搭建在linux上及windows客户端连接

环境介绍:

服务器:linux (redhat)

客户端:windows (win7)

git官网:http://git-scm.com/


GIT最新源码下载地址:https://github.com/git/git

gitbub上提供了最新git zip包,将下载下来的压缩包解压出来

$ unzip git-master.zip

解压出来后,目录下会有一个INSTALL文件(https://github.com/git/git/blob/master/INSTALL),里面介绍了源码安装的详细步骤,下面我们就按照INSTALL里的说明来进行git的安装

$ make configure
$ ./configure
$ make all doc	//如果不安装文档的话,可以只使用make命令,不用跟后面的参数
$ make install install-doc install-html	//如果不安装文档可以只使用make install命令,不用跟后面的参数

如果安装过程中遇到遇到错误一般都是因为缺少依赖文件,根据它的错误提示安装上对应的库就行了(建议用yum命令安装依赖文件,为什么不用yum安装git呢?因为yum里经常安装的不是最新的git版本,如果你可以接受的话,大可以通过yum的方式安装git)


添加GIT用户(客户端连接,都会以此用户的身份进行操作)

$ adduser git   ; 用户名可以自己定义,一般都用git见明之义

$ passwd git    ; 设置用户密码  

安装GITOSIS

Gitosis的部署和使用可以直接参考源码包中的README.rst。

Gitosis的安装

Gitosis在Github上的地址为 https://github.com/tv42/gitosis.git
使用Git下载Gitosis的源代码:
$ git clone https://github.com/tv42/gitosis.git


进入gitosis目录,执行安装:

$ cd gitosis
$ python setup.py install

Gitosis的安装常见问题

  • ImportError: No module named setuptools
    解决方案:安装setuptools模块,官网: https://pypi.python.org/pypi/setuptools
    shell> wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python

服务器端创建专用帐号

首先,我们会创建一个专门管理代码库的帐号。一般命名为git,此帐号不需要远程登录,所以不用设置密码,安全考虑不要用已经存在的系统用户,除非你非常明确你需要做什么。可以通过--home参数来设置代码库的存放目录(默认在用户宿主目录下),git用户实际上我们在安装git的时候已经添加了,以下面的命令可以忽略。

$ useradd git

Gitosis服务初始化

Gitosis服务初始化,就是初始化一个gitosis-admin库,并为管理员分配权限,gitosis-admin库非常重要,以后我们建的所有库的权限分配都要通过此库来进行操作。接下来我们将Gitosis管理员的公钥添加到专用账号的宿主目录下的公钥存放目录下,在此对应的是/home/git/.ssh/authrized_keys文件中,具体操作过程如下:

(1) 在你要进行操作gitosisi-admin库的客户端机器上生成密钥。

$ ssh-keygen

如果客户端是windows,在windows安装git后,对应开始菜单里GIT目录里会有Git Bash

GIT服务器搭建 gitosis 篇 系列1_第1张图片

运行此命令会打开仿unix命令行窗口,可以在此执行ssh-keygen命令:
$ ssh-keygen
命令行会提示如下,
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/benben/.ssh/id_rsa):
上面提示我们是否需要自定义公钥和密钥的生成目录,这里我们保持默认即可,上面的括号里是默认存放的目录。接下来按回车,命令行会提示如下,
Enter passphrase (empty for no passphrase):
为了防止我们的私钥被盗用的可能,上面提示我们为私钥输入使用密码,如果我们设置上密码后,以后每次我们要push或pull远程库的时候都会提示我们输入密码,不过再此我们可以不用输入密码,直接回车就可以。一路回车后,我们的密钥和公钥就会生成了,命令提示符下会输出它们保存的目录,其中id_rsa为私钥,id_rsa.pub为公钥。

(2)上传管理员公钥到服务器。

可以采用任何可行的方式(xshell的文件传输、FTP等)将公钥上传至服务器,此外我们把公钥id_rsa.pub保存在服务器的/tmp目录下。

(3)服务器端进行Gitosis服务初始化。
以git用户身份执行gitosis-init命令,并向其提供管理员公钥。

$ sudo su - git #切换到git用户身份下,不然执行下面的初始化后客户端管理员是无法通过密钥来访问的,权限的问题
$ gitosis-init < /tmp/id_rsa.pub
$ cd ~           #回到git用户的宿主目录
$ ls             #查看目录文件
gitosis   repositories   #自动生成两个目录

目录repositories是用来存放所有的git版本库

 
   
(4)确保gitosis-admin版本库的钩子脚本可执行。
chmod a+x ~git/repositories/gitosis-admin.git/hooks/post-update

管理Gitosis

管理员克隆gitosis-admin管理库

当Gitosis安装完成后,在服务器端自动创建了一个用于Gitosis自身管理的Git库:gitosis-admin.git。
管理员在客户端克隆gitosis-admin.git库,进入自己的工作目录,注意要确保认证中使用的是正确的公钥:

$ git clone git@server:gitosis-admin.git
$ cd gitosis-admin/

注:windows客户端在Git Bash里执行以上命令。

克隆完成后,进入gitosis-admin目录下,看有哪些文件

.git        (隐藏的目录, 如果在windows下看不见,请百度“windows下如何显示隐藏的文件”)

keydir   (目录,存放用户的公钥,刚开始只有一个管理员公钥)

gitosis.conf  (授权文件)


授权文件gitosis.conf,初始内容:

1   [gitosis]
2    
3   [group gitosis-admin]
4   writable = gitosis-admin
5   members = Administrator@PC201506151115

整个授权文件以用户组为核心,而版本库为核心。
  • 第3行开始定义了一个用户组gitosis-admin。
  • 第4行设定了该用户组对哪些版本库具有写操作。
  • 第5行设定了该用户组包含的用户列表。初始时只有一个用户,即管理员公钥所属的用户。

创建测试git版本库

$ su git
$ cd ~/respositories
$ mkdir test.git
$ cd test.git
$ git init --bare

配置新客户端

增加新用户,就是允许新用户能够通过其公钥访问Git服务。

1、将新用户的公钥添加到gitosis-admin版本库的keydir目录下。
管理员从用户获取公钥,并将公钥按照username.pub格式进行重命名,管理员进入gitosis-admin本地克隆版本库中,复制新用户公钥到keydir目录。

2、配置gitosis.conf文件
增加用户对测试库的访问权限。
1   [gitosis]
2    
3   [group gitosis-admin]
4   writable = gitosis-admin
5   members = Administrator@PC20150615111
6
7   [group common]
8   writable = test
9   members = 用户1 用户2

提交gitosis-admin版本库的更改
$ git add .
$ git commit -m "增加新成员xxx,yyy对test测试库的访问权限"
$ git push

此时新的客户端就拥有对测试库的操作权限了,在客户端执行git clone命令,clone下来测试库。
$ git clone ssh://[email protected]/test.git



你可能感兴趣的:(linux)