快速架设一个简单的基于 SSH 的 Git 服务

jopen 11年前

一直使用在 github 上托管的 git 服务,虽然 github 的代码托管,协作,wiki 功能,以及 bug tracking 功能都非常好用。但是随着项目不断增多,github 最便宜的每月 7 美元 5 个 private 项目的容量很快不够用了。想想反正自己有一台 Linode 的 CentOS 云服务器,于是诞生了自己架一套 git service 的念头,就不花钱升级 github 了。

根据 git 网站 Pro Git 书中的说明,选择 SSH 方式简单架设了一套。因为主要是自己使用,不存在提供给别人公共访问的要求,而且基本每台 Linux 服务器都可以 SSH, 所以选择了 SSH 方式。Pro Git 中对 git 可以采用的几种协议的优缺点以及适用场景都有详细介绍。下面是使用 SSH 方式的基本步骤:

有关 git 使用 SSH 的基本知识

要通过 SSH 克隆一个 Git repository,我们可以像下面这样指定 ssh:// URL :

$ git clone ssh://user@server:project.git

或者我们也可以不指定一个协议 — 如果没有显式指定的话 Git 假设是 SSH:

$ git clone user@server:project.git

我们也可以不指定一个用户,这样的话 Git 会假设是当前登录的用户(和使用 SSH 命令的情形类似)。

第一步,放一个裸的 Repository 到服务器上

假设 my_project 是我们在本地的一个 git Repository 项目目录,通过使用 --bare 参数生成只包含 git 信息的裸的项目拷贝

$ git clone --bare my_project my_project.git

第二步,通过 scp 命令把 git 拷贝存储到服务器

现在我们已经有了一个裸的 Repository 的拷贝,下一步就是把它放到服务器上。假设我们已经有了一个名为 git.example.com 的服务器,并且已经可以通过 SSH 进行访问。假设我们也在服务器的/opt 目录下建了一个名为 git 目录专门用来存放 git 项目信息。我们就可以像下面这样通过拷贝一个裸的 Repository 到服务器上来设置一个新的 Repository:

$ scp -r my_project.git user@git.example.com:/opt/git

需要注意的是,如果我们给 SSH 设置了不同的访问端口(不是默认的 22),比如说是8080,那么我们需要用 -P 8080 参数来指定 SSH 使用的端口。

$ scp -r -P 8080 my_project.git user@git.example.com:/opt/git

第三步,使用服务器上的 git

这时候,其他也具有到同一台服务器 SSH 访问权限的用户就可以通过运行下面的命令来克隆我们的项目啦,要求至少对 /opt/git 目录具有读取权限:

$ git clone user@git.example.com:/opt/git/my_project.git

这里同样要注意 SSH 端口的问题,如果不是默认的 SSH 端口,要像下面这样运行命令(注意没有省略 ssh://,以及 8080 端口号放置的位置)

$ git clone ssh://user@git.example.com:8080/opt/git/my_project.git

剩下的就是和通常 git 的用法一样了,git pull git push

例如:
$ git pull ssh://user@git.example.com:8080/opt/git/my_project.git

希望通过 SSH 之外的其他方式来假设 git,或者像提供 git 的公共访问或是希望提供 Web 页面的,更多信息请参考 git 官方网站上的文章:Git on the server

原文地址:http://www.tfan.org/build-a-simple-ssh-git-service-in-five-minutes/