在远程仓库⼀一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24⼩小时开
机并交换⼤大家的修改。
GitHub就是⼀一个免费托管开源代码的远程仓库。但是对于某些视源代码如⽣生命的商业公司
来说,既不想公开源代码,⼜又舍不得给GitHub交保护费,那就只能⾃自⼰己搭建⼀一台Git服务器
作为私有仓库使⽤用。
搭建Git服务器需要准备⼀一台运⾏行Linux的机器,强烈推荐⽤用Ubuntu或Debian,这样,通过
⼏几条简单的apt命令就可以完成安装。
假设你已经有sudo权限的⽤用户账号,下⾯面,正式开始安装。
第⼀一步,安装git:
$ sudo apt-get install git
第⼆二步,创建⼀一个git⽤用户,⽤用来运⾏行git服务:
$ sudo adduser git
第三步,创建证书登录:
收集所有需要登录的⽤用户的公钥,就是他们⾃自⼰己的id_rsa.pub⽂文件,把所有公钥导⼊入到/
home/git/.ssh/authorized_keys⽂文件⾥里,⼀一⾏行⼀一个。
第四步,初始化Git仓库:
先选定⼀一个⺫⽬目录作为Git仓库,假定是/srv/sample.git,在/srv⺫⽬目录下输⼊入命令:
$ sudo git init --bare sample.git
Git就会创建⼀一个裸仓库,裸仓库没有⼯工作区,因为服务器上的Git仓库纯粹是为了共享,所
以不让⽤用户直接登录到服务器上去改⼯工作区,并且服务器上的Git仓库通常都以.git结尾。然
后,把owner改为git:
$ sudo chown -R git:git sample.git
第五步,禁⽤用shell登录:
出于安全考虑,第⼆二步创建的git⽤用户不允许登录shell,这可以通过编辑/etc/passwd⽂文件
完成。找到类似下⾯面的⼀一⾏行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git⽤用户可以正常通过ssh使⽤用git,但⽆无法登录shell,因为我们为git⽤用户指定的git-
shell每次⼀一登录就⾃自动退出。
第六步,克隆远程仓库:
现在,可以通过 git clone 命令克隆远程仓库了,在各⾃自的电脑上运⾏行:
Git教程 By 廖雪峰
整理、排版:numbbbbb
$ git clone git@server :/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.
剩下的推送就简单了。
管理公钥
如果团队很⼩小,把每个⼈人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys
⽂文件⾥里就是可⾏行的。如果团队有⼏几百号⼈人,就没法这么玩了,这时,可以⽤用Gitosis来管理公
钥。
这⾥里我们不介绍怎么玩Gitosis了,⼏几百号⼈人的团队基本都在500强了,相信找个⾼高⽔水平的
Linux管理员问题不⼤大。
管理权限
有很多不但视源代码如⽣生命,⽽而且视员⼯工为窃贼的公司,会在版本控制系统⾥里设置⼀一套完善
的权限控制,每个⼈人是否有读写权限会精确到每个分⽀支甚⾄至每个⺫⽬目 录下。因为Git是为Linux
源代码托管⽽而开发的,所以Git也继承了开源社区的精神,不⽀支持权限控制。不过,因为Git
⽀支持钩⼦子(hook),所以, 可以在服务器端编写⼀一系列脚本来控制提交等操作,达到权限
控制的⺫⽬目的。Gitolite就是这个⼯工具。
这⾥里我们也不介绍Gitolite了,不要把有限的⽣生命浪费到权限⽃斗争中。
⼩小结
搭建Git服务器⾮非常简单,通常10分钟即可完成;
要⽅方便管理公钥,⽤用Gitosis;
要像SVN那样变态地控制权限,⽤用Gitolite。