Install a git server use gitolite over the ssh

闲话

最近这段时间处在封闭开发状态,基本上没什么时间写日志了,不过现在也忙的差不多了,更重要的是,今天需要安装一台Git服务器做为开发之用,而且需要把安装过程整理出一份文档 ,所以,咱就直接写出来,也做为一篇日志发布了吧。

进入正题

建立服务器的软件我这里选用Gitolite,之所以选用Gitolite,一是因为之前曾经使用过Gitolite,再一个是因为Gitolite可配置性更高,而且更为小巧。而且,由于这个服务器只在内部使用,没有必要使用Gitlab这种体积庞大的提供过多的WEB方面功能的程序。

没有特别声明的都为在服务器上执行

  1. Git
    使用系统命令安装git客户端,比如yum install git,版本最好不要太低,1.7以上。
  2. 建立Git帐户
    useradd -d /opt/git -m git,用户目录的位置不做要求,但是由于是专用帐号,最好是放在有备份保证的目录,便于管理。
  3. 生成管理公钥 (管理端)
    ssh-keygen -t rsa -C "Git Admin" -f gitadmin
    这个步骤需要注意的是生成密钥对最好不要加密码,否则有可能出现奇怪的问题。完成这一步后将gitadmin.pub文件传至git的HOME目录中备用。
  4. 同步Gitolite代码
    git clone https://github.com/sitaramc/gitolite,此命令需要在Git用户的HOME目录中执行。
  5. 安装Gitolite
    在用户目录中执行gitolite/install -ln,参数的意思是在HOME/bin便gitoliteinstalltoHOME/bin目录中建立指向源代码目录的文件链接,这样做的好处是可以方便的升级gitolite,另外,install命令另一个参数是-to可以指定命令安装到的目录,默认情况下不需要指定。 需要注意的是,默认安装的时候需要将HOME/bin加入PATHPATH,如果指定安装目标需要将HOME/to_dir加入$PATH。
    执行完install之后需要执行gitolite setup -pk gitadmin.pub
    完成后,需要再检查一下~/.ssh目录和其中的authorized_keys文件的权限,需要将权限控制为仅本人可读写。
  6. 同步管理库(管理端)
    由于管理端或客户端与Git服务器之间的通讯是基于ssh的,所以,为了便于使用,需要对与Git服务器的连接进行单独配置,打开~/.ssh/config,在其中加入单独定义管理时所使用的密钥文件。
1
2
3
4
host gitadmin
HostName xxx.xxx.xxx.xxx
User git
IdentityFile \~/.ssh/gitadmin

经过以上配置即可以执行git clone gitadmin:gitadmin获取管理库,之后所有对服务器的管理只能通过此管理库进行,严禁直接在服务器上对服务器进行修改。
7. 修改Gitolite配置及用户管理
详细使用配置及管理方法请参考源代码目录下的README.txt
8. 从Subversion向Git做版本迁移
两种方法

  • git svn clone svn://url.to.svn/repos --no-metadata --authors-file=users.txt
    直接从svn版本库中clone数据到本地,其中
    –no-metadata 指定命令不在git版本库中加入svn版本元数据。
    –authors-file 指定与svn用户相对应的git用户。

  • git svn init svn://url.to.svn/repos --no-metadata

  • git svn fetch --authors-file=users.txt
    这两个命令为一组,第一个命令初始化一个基于svn源的git库,此时可以在该库的.git目录下修改branches和tags信息,完成之后使用第二个命令开始同步代码,此时代码将按照配置把不同分支或标签下的代码提交到git库的指定位置。
    如要迁移的Subversion版本库使用遵循惯例的目录设置,则可以在第一种方法和第二种方法的第一条命令中加入-s选项,本选择可以简化同步的操作。

Windows版客户端TortoiseGit下载地址:http://download.tortoisegit.org/tgit/1.8.8.0/
Pro Git: http://git-scm.com/book/zh/

结束语

Git的使用入门很容易 ,只需要简单的分支、标签管理和版本提交,基本上就可以满足日常的需求,当然,还有更多的特性需要在使用的过程中逐渐的接触和应用。