烦恼一般都是想太多了。

0%

关于建立Git服务器

简单的记录一下使用 ssh 作为协议来建立 git 服务器的过程,然后对其不足进行一下研究,然后再探究一下当前比较好的 git 服务器的方案。

SSH 作为协议来建立

大体分为几个步骤:

  1. git 初始化一个裸库。
  2. 设置裸库文件夹的权限
  3. 利用 SSH 来作为用户管理。

初始化

一句命令即可

git init --bare /opt/gitserver.git

设置裸库权限

事实上这个是利用了操作系统的权限管理机制来进行的。我们将 gitserver.git 目录,给予用户 git,给予组 git ,然后将其他需要对此库进行操作的用户添加进组,就可以对此库进行操作了。

chown git:git /opt/gitserver.git

默认情况下,系统文件的 umask 是 002 ,是组可写的,所以对其他用户加入 git 组就行了。

useradd -G git -s /usr/bin/git-shell user1
password user1

使用私钥

我的做法是在 git 用户的 $HOME/.ssh/authorized_keys 里面放上用户的公钥即可

存在的问题

我们上面这种做法存在两个问题:

  1. 需要为每个用户建立一个账号,设置密码。
  2. 有的用户推送上来的文件,会让 object 中的目录和文件的权限变更为 pusher 其他人无法进行写入。
  3. 很麻烦。

第二个问题的解决办法是:

git init --bare --shared

或者:

第二个办法是在主机上建立一个 git 账户,让每个需要写权限的人发送一个 SSH 公钥,然后将其加入 git 账户的 ~/.ssh/authorized_keys 文件。 这样一来,所有人都将通过 git 账户访问主机。 这一点也不会影响提交的数据——访问主机用的身份不会影响提交对象的提交者信息。

git 服务

在 git-scm 网站上,推荐的是用 gitlab 进行本地的部署,比较灵活。

https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-GitLab