搭建Git服务器

By whitewater

之前写过一篇介绍搭建svn的博客,这些天公司要迁移到git上,我帮公司搭建了Git服务器,记录下来。

###1. SSH公钥认证 Git可以使用很多协议,比如本地文件协议File://,HTTP协议http://,https://,Git协议git://,ssh协议ssh://, 本文主要介绍ssh协议的使用。ssh协议安全,可靠,部署方便。

SSH公钥认证的基本知识可以参考这里,大家主要了解如何产生ssh私有和公开key对,如何使用ssh主机别名。

###2. Gitolite安装 Git服务器最早的是Gitosis,后来不更新的,现在较为流行的是Giolite,貌似一直在更新,用的人很多,比较可靠。

##1.1依赖安装

  • any unix system
  • sh
  • git 1.6.6+
  • perl 5.8.8+
  • openssh 5.0+
$sudo apt-get install openssh-server openssh-client perl git git-core

##1.2创建git专用用户 $ sudo adduser –disabled-password –system –shell /bin/bash –group git $ sudo adduser git ssh $ sudo passwd -l git git用户不需要密码登陆,只需要ssh公钥登陆,如果想要在服务器上以git用户登陆,请用: $ sudo su - git ##1.3初始安装gitolite 由于gitolite的初始安装会自动创建gitolite-admin版本库(用于管理员配置git版本库),所以需要一个可以访问 该版本库的用户。假设在A这台机器上搭建gitolite,并且在B机器上管理gitolite。注意B和A可以是同一台机器。 首先登陆B这台机器,创建ssh key #on B machine $sudo ssh-keygen -f ~/.ssh/git-admin 然后不管你用什么方法,需要把B机器上的生成的git-admin.pub拷贝到A机器git用户的根目录下。登陆A机器,确保 /home/git/.ssh/authorized_keys为空,或者不存在。 # on A machine $ sudo su - git $ cd ~ #make sure ~/.ssh/authorized_keys is empty or non-existent $ git clone git://github.com/sitaramc/gitolite $ mkdir -p $HOME/bin $ gitolite/install -to $HOME/bin $ HOME/bin/gitolite setup -pk git-admin.pub ##1.4管理gitolite 登陆B机器,创建ssh主机别名,在~/.ssh/config(没有则创建该文件)中添加: host gitadmin_HOSTNAME(A) user git hostname HOSTNAME(A) port 22 identityfile ~/.ssh/git-admin 将HOSTNAME(A)替换为A机器的ip地址或者主机名(如果主机名可以正确解析)。 然后在bash shell中: $ git clone gitadmin_HOSTNAME(A):gitolite-admin.git $ cd gitolite-admin gitolite-admin目录中包含conf和keydir两个目录,conf用于配置版本库和用户权限,keydir用于管理ssh key。 如果需要添加用户,就需要把用户的ssh public key拷贝到keydir目录下,然后commit, push到服务器即可。 gitolite的钩子程序会自动把keydir下新增的public key添加到服务器的authorized_keys中。 conf目录中的gitolite.conf是配置版本库,基本语法如下: @alldev = dev1 dev2 repo testing RWC+ master = @all @可以表示用户组,上面表示dev1 dev2是alldev组中的,并且alldev组队testing这个版本库的master分支具有RWC+权限。 详细的配置文档参见这里。 ##1.5使用git git客户端windows用户推荐使用Github for windows,linux用户直接安装git, git-core, git-doc即可。 用户使用ssh-keygen -f $HOME/.ssh/USERNAME来创建ssh key,并把$HOME/.ssh/USERNAME.pub邮件发送给管理员即可。 ##1.6Gitolite高级 默认情况下git允许用于随意设置user.name, user.email,推送的时候gitolite并不检查commit的user.name是否和username相同,这样是为了 git修改历史命令的,例如git rebase, git cherry-pick等。但是gitolite也在自己的log中忠实的记录的每个commit的推送人(pusher)。想要 知道特定commit的推送人,可以使用git用户登录到git服务器: $cd ~ $bin/gitolite who-pushed $bin/gitolite who-pushed testing bfb8fbb #example ###参考 [https://github.com/sitaramc/gitolite](https://github.com/sitaramc/gitolite)

http://www.ossxp.com/doc/git/gitolite.html

http://blog.chinaunix.net/uid-20940095-id-3340707.html

comments powered by Disqus
about theme

I am whitewater.I love all kinds of beauty

Recent Comments

Keep Space

TBD