ref: 廖雪峰 - 搭建 Git 服务器
利用一个 7 x 24 开机的服务器,搭建一个方便代码交换的中转服务器
操作记录
- 安装 git
$ sudo apt-get install git
$ sudo yum install git
- 新增 git 用户,用于 ssh 访问
$ sudo adduser git
- (如果需要)将公钥导入到
/home/git/.ssh/authorized_keys
文件里;或者在本地执行ssh-copy-id user@host -p 1234
,其中 -p 参数指定了 ssh 服务的端口; - 禁用 git 账户的 ssh 登录:这可以通过编辑
/etc/passwd
文件完成。
$ vim /etc/shadow
- git:x:1001:1001:,,,:/home/git:/bin/bash
+ git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
- 初始化一个裸(Bare) 仓库,并修改权限
$ sudo git init --bare sample.git
$ sudo chown -R git:git sample.git
- 远程访问该仓库,如
git clone
或者git remote add origin git@host:/xxx
补充事项
如果修改了 ssh 的访问端口,显然 git 使用 ssh 访问时也要指定端口,典型的使用方式如下:
$ git remote add origin ssh://git@<host>:<port>/path/to/simple.git
$ git push --set-upstream origin main
这里使用了完整的协议格式来指定端口。
Claim
管理权限
from 廖雪峰
有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。
这里我们也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。