现在要使用Git来管理你的项目,实在是太多手段了。如果你开发的是开源项目,直接在Github新建一个项目即可;若是你的项目暂不想公开,也可以使用Github私有付费项目。不过,对于公司项目来说最多使用的还是自建Git服务器。
要想搭建一个Git服务器,第一步先了解git使用的协议。来看看git-scm book是怎么说的:
Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议。
这四种协议的详细介绍可以看这里 git-scm book
从以上四种协议的详细介绍中,基本确定要搭建一个具有读写权限的Git服务器,最优的选择便是SSH协议。原因如下:
使用 SSH 的好处有很多。首先,如果你想拥有对网络仓库的写权限,基本上不可能不使用 SSH。其次,SSH 架设相对比较简单 — SSH 守护进程很常见,很多网络管理员都有一些使用经验,而且很多操作系统都自带了它或者相关的管理工具。再次,通过 SSH 进行访问是安全的 — 所有数据传输都是加密和授权的。最后,和 Git 及本地协议一样,SSH 也很高效,会在传输之前尽可能压缩数据。
搭建基于SSH协议的Git服务器
*基于Ubuntu 13.04 Server操作系统
- 安装Git
sudo apt-get install git-core
- 新建Git服务器使用的用户
sudo apt-get adduser -d /home/git -m git
sudo apt-get passwd git
- 设置访问权限
有好几个办法可以让团队的每个人都有访问权。
- 给每个人建立一个账户,直截了当,但过程繁琐。
- 在主机上建立一个 git 账户,让每个需要写权限的人发送一个 SSH 公钥,然后将其加入 git 账户的 ~/.ssh/authorized_keys 文件。
- 让 SSH 服务器通过某个 LDAP 服务,或者其他已经设定好的集中授权机制,来进行授权。
这里要使用的是第二种方法,具体操作步骤参见另一篇博文:配置ssh密钥认证自动登录
- 禁止Git用户直接登录Git服务器
作为一个额外的防范措施,你可以用 Git 自带的 git-shell 工具限制 git 用户的活动范围。只要把它设为 git 用户登入的 shell,那么该用户就无法使用普通的 bash 或者 csh 什么的 shell 程序。
which git-shell #查看git-shell的路径
sudo vim /etc/passwd #编辑passwd文件
在文件末尾,你应该能找到类似这样的行:
git:x:1001:1003::/home/git:/bin/sh
更改为
git:x:1001:1003::/home/git:/usr/bin/git-shell
- 建立仓库
先行建立一个保存版本库的目录,如:
sudo mkdir -p /home/git/repo #新建版本库目录
sudo chown -R git:git /home/git/repo #将文件夹所有权更改为git用户
初始化项目版本库
cd /home/git/repo
sudo git init --bare project.git
sudo chown -R git:git /home/git/repo/project.git
- 克隆远程仓库
git clone git@hostname:~/repo.project.git #将hostname替换你的git服务器IP