如果你现在用的是Cubieboard 或者树莓派卡片式电脑,可以查看本文之前,学习前面的四个教程,它可能会对你非常有帮助。如果你是普通的Linux用户或者Linux VPS、Linux 独立服务器等,可以直接跳过查看本文。

非常欢迎你开始阅读 Cubieboard Linux服务器教程五,这节教程主要讲解如果在Linux上搭建一个Git 服务器,用于规范整个团队的合作开发流程。通过Git 服务器,团队Leader可以随时通过网页跟踪代码提交、代码质量、代码差异、代码评论描述。

首先我需要做的是整理出一个非常适合团队开发的流程:

1、Git 服务器上存放代码仓库,存储所有开发版本;

2、本地局域网或者远程开发者组成很多开发节点,每个节点可以做自己的分支开发,再提交到Git 服务器;

3、根据每个开发者的分支,由Leader或者有权限的开发者整合到主要分支(merge origin master),并提交(commit);

4、Git 服务器收到主分支提交动作(push origin master) 后,根据钩子(hooks)自动同步到在线网站;

根据这个流程,大概的流程图就是如下:

git-workflow-picture 整理出一个非常适合团队git开发的流程

其中:Git 仓库和在线网站由 Cubieboard Linux 服务器来担任。

查看原文:  Cubieboard Linux服务器教程五之架设Git服务器 http://blog.lixiphp.com/cubieboard-linux-git-server/#ixzz2Y5KxYQaO

Git 安装

很显然,Git 是需要安装在服务器上和你的本地机器,前者作为服务器端,后者作为客户端。

如果你的客户端是Linux 操作系统,那么你可以跳过下面的Windows客户端的安装,和服务器端的安装方法一样。

Windows 客户端安装Git:

当前版本Windows 1.8.3 官方绿色版Git安装包,解压即可使用。

下载地址:https://msysgit.googlecode.com/files/PortableGit-1.8.3-preview20130601.7z

点击解压后,文件夹中的 git-cmd.bat 文件,输入git –version 显示如下图,说明安装成功!

Git-windows-install Git Windows 安装 打开 git-cmd.bat 文件 输入git --version 显示

如果没有显示Git 版本或者无法使用Git命令时,那么请将目录中bin 目录加入到Windows的环境变量中去。

Linux 服务端和客户端安装Git:

使用如下命令安装:

apt-get insatll git

Git 安装好后即可作为仓库使用也可作为Clone使用。

Git SSH 协议

Git 使用的传输协议中最常见的可能就是 SSH 了。这是因为大多数环境已经支持通过 SSH 对服务器的访问 — 即便还没有,架设起来也很容易。SSH 也是唯一一个同时支持读写操作的网络协议。另外两个网络协议(HTTP 和 Git)通常都是只读的,所以虽然二者对大多数人都可用,但执行写操作时还是需要 SSH。SSH 同时也是一个验证授权的网络协议;而因为其普遍性,一般架设和使用都很容易。

通过 SSH 克隆一个 Git 仓库,你可以像下面这样给出 ssh:// 的 URL:

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

或者不指明某个协议 — 这时 Git 会默认使用 SSH :

$ git clone user@server:project.git

如果不指明用户,Git 会默认使用当前登录的用户名连接服务器。

优点:

使用 SSH 的好处有很多。首先,如果你想拥有对网络仓库的写权限,基本上不可能不使用 SSH。其次,SSH 架设相对比较简单 — SSH 守护进程很常见,很多网络管理员都有一些使用经验,而且很多操作系统都自带了它或者相关的管理工具。再次,通过 SSH 进行访问是安全的 — 所有数据传输都是加密和授权的。最后,和 Git 及本地协议一样,SSH 也很高效,会在传输之前尽可能压缩数据。

缺点:

SSH 的限制在于你不能通过它实现仓库的匿名访问。即使仅为读取数据,人们也必须在能通过 SSH 访问主机的前提下才能访问仓库,这使得 SSH 不利于开源的项目。如果你仅仅在公司网络里使用,SSH 可能是你唯一需要使用的协议。如果想允许对项目的匿名只读访问,那么除了为自己推送而架设 SSH 协议之外,还需要支持其他协议以便他人访问读取。

架设Linux Git 服务器

首先,创建一个名为 ‘git’ 的用户,作为授权用户。

$ sudo adduser git
$ su git

生成 SSH 公钥:

大多数 Git 服务器都会选择使用 SSH 公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的话就要生成一个。生成公钥的过程在所有操作系统上都差不多。首先先确认一下是否已经有一个公钥了。SSH 公钥默认储存在账户的主目录下的 ~/.ssh 目录。

检查 “git”用户是否已经有SSH:

$ cd
$ ls -al .ssh/
drwxrwxr-x 2 git git 4096 Jun 22 03:32 .
drwxr-xr-x 4 git git 4096 Jun 18 04:50 ..
-rw-rw-r– 1 git git 1193 Jun 22 03:41 authorized_keys
-rw——- 1 git git 1671 Jun 18 02:54 id_rsa
-rw-r–r– 1 git git  396 Jun 18 02:54 id_rsa.pub
-rw-r–r– 1 git git 2220 Jul  2 01:03 known_hosts

关键是看有没有id_dsa 或 id_rsa,有.pub 后缀的文件就是公钥,另一个文件则是密钥。假如没有这些文件,或者干脆连 .ssh 目录都没有,可以用 ssh-keygen 来创建。

$ cd
$ mkdir .ssh
$ ssh-keygen

一直敲击回车键,就会自动生成密钥。

$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC01uLvyF8exuGVfuqrX94yo6M+j6lUMBcYm6S885izgyPI6T0
Nj/vBc/HmEkbzImcv7qJgqE1nYljaakNaCjqKl5tUFbIoAf2wSaDR4/njSrf1JCoLsXQi8QWAkloH3HgFANay6xydweZg
743Qh9YDls2tmNBmIhm69OIEuGIB5qL1PLCtnswIvEVhjS6P8OFxhiJ7/yfDGTMKWjqVIYHYbijBE8EbaoGdu1jdir2
WKD+6ekujpeL6fgn2HxgpOoTcmdxZs880MkS+2Z6WUzRCsIM25u6nXPDtJIdE1dBgzCcR68qCWQlzS3eGOEiJL
5RQurTdOQW3tVYmlgQOZtmx git@cubieboard

类似上面的数据。

我们将使用 authorized_keys 方法来给用户授权。

$ cat /home/git/.ssh/id_rsa.pub  >> /home/git/.ssh/authorized_keys

将Linux服务器上的Git用户加到授权账户里,相当于本机git用户在提交、更新、整合等操作时不再需要输入密码进行验证。

架设Git服务端仓库与客户端克隆和推送

首先Git 需要建立一个裸仓库,可以用 运行 git init –bare 选项来建立一个裸仓库,初始化一个不包含工作目录的仓库。

$ mkdir -p /srv/git
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git –bare init

这时,客户端就可以把它加为远程仓库,推送一个分支,从而把第一个版本的项目文件上传到仓库里了。值得注意的是,每次添加一个新项目都需要通过 shell 登入主机并创建一个裸仓库目录。

# 在 LixiPHP 的电脑上
$ git clone git@git.lixiphp.com:/srv/git/project.git myproject
$ cd myproject
$ touch README
$ git add -A
$ git commit -m ‘initial commit’
$ git push origin master

接下来就是你对Master主分支的代码管理了。

架设Git 服务端 LNMP在线查看仓库历史代码

首先请安装 教程三 Cubieboard Linux 服务器安装LNMP环境 搭建git.lixiphp.com域名。在LNMP中安装Gitlist,Gitlist 是一个Git仓库查看器,是一个PHP开源程序。 GitList 能够实现匿名在线浏览版本控制系统源码仓库中的内容。

读取Git 服务器端仓库代码到一个克隆目录:

# 在 Cubieboard Git 服务器上
$ cd /srv/www/git.lixiphp.com/public_html
$ mkdir repos
$ cd repos
$ git clone git@git.lixiphp.com:/srv/git/project.git project

设置 Gitlist 的config.ini去读取克隆目录:

# 在 Cubieboard Git 服务器上
$ cd /srv/www/git.lixiphp.com/public_html/gitlist
$ vi config.ini
# 设置repositories仓库代码位置
[git]
client = ‘/usr/bin/git’ ; Your git executable path
default_branch = ‘master’ ; Default branch when HEAD is detached
repositories[] = ‘/srv/www/git.lixiphp.com/public_html/repos’ ; Path to your repositories

其中 /srv/www/git.lixiphp.com/public_html/gitlist 安装了最新版的Gitlist,如果不知道如何安装Gitlist,请查看Gitlist 安装与配置文章。

设置 Git 仓库钩子(hooks)同步更新 Commit 到 Gitlist 克隆目录,进行在线查看:

$ cd /srv/git/project.git/hooks/
$ vi post-update
# 文件内容如下:
#!/bin/sh
echo
echo “**** Pulling changes into Project”
echo
cd /srv/www/git.lixiphp.com/public_html/repos/project || exit
unset GIT_DIR
git pull
exec git-update-server-info
$ chown -R git.git post-update
$ chmod +x post-update

测试一下钩子是否已经工作可以直接运行一下钩子。

$ ./post-update

注意:前面我们 authorized_keys 方法来给 “git”用户授权,这个Git pull 的时候不需要再输入密码来验证。

打开Gitlist网站看看project是否同步了。

http://git.lixiphp.com/gitlist/ 查看所有的Gitlist仓库代码。

LixiPHP-Git-Repos-Gitlist-preview Git 服务器 查看所有的Gitlist仓库代码

最后一个project 目录就是我们及时同步显示的仓库。

http://git.lixiphp.com/gitlist/project/commits/master 查看代码提交版本,代码差异,代码评论等等。

GitList-Commit-Preview Git 服务器上查看Gitlist代码提交版本,代码差异,代码评论等等