服务器环境

  • 系统: Ubuntu 16.04
  • 用户: root

安装 Git

# apt-get install git

创建 Git 用户及权限

我们不希望使用 root 用户直接上传代码,所以在 Ubuntu 上新建一个 Git 用户。

# adduser git

执行这行代码后会在 /home 目录下新建一个 git/ 文件夹,这是 git 用户的家目录。但我们仅仅想通过 git 用户更新代码,不希望通过 ssh 登录到我们的服务器中。所以我们要禁止 ssh 登录:

# vim /etc/passwd

git:x:1001:1001:,,,:/home/git:/bin/bash

更改为

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样处理好,git就不能ssh连上去了(实际上是可以的,只不过会闪退)。

我们还得给git分配一个密码,执行:

# passwd git 123456(你的密码)

这个密码用在你后面提交代码的时候使用。

公钥

首先在你自己的电脑上生成自己的一个公钥:

$ cd ~
$ ssh-keygen -t rsa

这时你自己电脑上就有一个公钥了,在 .ssh 目录下。

$ cd .ssh
$ vi id_rsa.pub

把所有的内容复制下来,我们回到服务器上面操作。

# cd /home/git/
# mkdir .ssh
# cd .ssh
# vi authorized_keys

这样做主要是为了无需密码就可以提交代码。

初始化一个git仓库

因为使用 Apache 的缘故,我习惯把这类东西丢到 /var 目录下,所以,我们在 /var 下面创建一个 git 目录。

# cd /var
# mkdir git
# chown -R git:git git
# chmod 777 git
# cd git

接下来,我们用git命令初始化一个仓库:

# git init --bare hello.git

初始化完成之后,就建立了一个空的仓库。

注意: 你在本地电脑提交代码时,可能会遇到类似的错误提示:

remote: error: insufficient permission for adding an object to repository database ./objects
remote: fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To git@xx.xx.xx.xx:/var/git/hello.git
 ! [remote rejected] master -> master (unpacker error)

这是因为 /var/git 目录虽然已经更改为 git 用户的最高权限,但该目录下的项仓库目录还可能是 root 用户。所以没有写入权限,我们要更改仓库目录的权限:

# chown -R git:git hello.git

克隆 hello.git

$ git clone git@xx.xx.xx.xx:/var/git/hello.git

会提示你输入 git 用户的密码,克隆成功说明 git 服务器已经搭建好了。可以写点代码 push 一下试试。

多用户和权限管理

如果团队很小,把每个人的公钥收集起来放到服务器的 /home/git/.ssh/authorized_keys 文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用 Gitosis 来管理公钥。

添加新评论