Bootstrap

Linux环境下搭建git服务器

最近一个项目需要重构,由于还没立项,不能申请版本库,一开始开发的时候需要用代码比较工具手动进行代码合并。这样做效率实在太低,不仅容易漏掉代码,还可能引入bug。看到组里面有很多测试用的服务器,因此提出一个方案,自己搭建git服务器。

参考了很多网上的教程,最终成功搭好了,但是踩了很多坑。因此这边总结了一套完整可复现的步骤,希望看这篇文章的同学可以少踩一些坑。

强烈推荐用Ubuntu或Debian,我自己阿里云服务器的Ubuntu系统很顺利就配置好了,公司的CentOS折腾了半天。

1. 安装Git

首先需要在服务器上安装Git。如果是Ubuntu系统执行下面的命令:

$ apt-get install git

如果是CentOS系统执行下面的命令:

$ yum -y install git

如果当前不是 root 用户,需要在命令前加 sudo

2. 创建用户

实际测试发现,adduseruseradd 两个命令都可以用。如果是Ubuntu系统,执行 adduser 之后基本就是一套傻瓜式配置流程,按照提示设置密码和其他信息即可:

$ adduser git # 创建一个git用户

如果是CentOS,执行 adduser 则不会有提示,还需要手动设置密码:

$ passwd git # 给git用户设置密码

注意:输入 passwd git 后按回车,就会提示让你输入密码,如果密码设置比较简单,可能会出现警告信息,不要管他,再输入一遍就可以了。

在Linux系统下,root 用户有权限更改其他用户的密码,而不用知道原来的密码。其他用户只能更改自己的密码。如果当前不是 root 用户,需要在命令前加 sudo

3. 创建证书

使用证书的目的就是免密 ssh 登录。在本地环境创建一个 ssh 密钥,如果已创建可以跳过这步:

$ ssh-keygen -t rsa

找到密钥存放的路径,把 id_rsa.pub 里面的内容,导入到服务器的 /home/git/.ssh/authorized_keys 里面。

我在测试的时候,/home/git 下面没有 .ssh ,我就自己建了一个。

如果有其他用户也需要登录,把他们的公钥也放到这里,一行一个。

4. 初始化Git仓库

选定一个目录作为Git仓库,在这个目录下执行命令:

$ git init --bare sample.git

注意仓库目录最好在 /home/git 下面,如果是其他目录,在后面执行 git clone 的时候可能会提示 … dose not appear to be a git repositry

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。

然后,把owner改为git:

$ chown -R git:git sample.git

如果当前不是 root 用户,需要在命令前加 sudo

5. 禁用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每次一登录就自动退出。

我们团队只有两三人,所以没有做这个设置。

6. 克隆远程仓库

接下来就可以让每个人在各自的电脑上运行 git clone 命令了。命令的格式如下:

$ git clone username@server:repositry path

例如:

$ git clone [email protected]:/home/git/repo/cm-refactor.git

这里有一个问题,Git默认的端口号是 22 ,而公司服务器的 ssh 端口是 2343 ,我们知道如果 ssh 登录的话是支持指定端口号的,例如:

$ ssh -p 2343 [email protected]

但是 git clone 命令不能这样设置,这个时候就需要这样:

$ git clone ssh://git@hostname:port/.../xxx.git

例如:

$ git clone ssh://[email protected]:2343/home/git/repo/cm-refactor.git

参考

搭建Git服务器 - 廖雪峰
搭建属于你自己的 Git 服务器 - 知乎

;