当前位置: > Linux服务器 > Git >

Git Server搭建

时间:2016-05-29 03:32来源:linux.it.net.cn 作者:IT

1 参考

所有相关细节均可以从该文档出获取:

http://git.oschina.net/progit/4-%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git.html#



2 安装

Git并不存在Server端和Clint端之分,在Git Server上安装的也还是Git。最简单的安装方式是直接用系统提供的包管理工具。例如CentOS/RHEL,可以使用:

yum install git



3 协议

Git支持四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议, 我们来简单快速地过一下这四种协议。



3.1 FILE 本地协议

对于本地协议来讲几乎只有一种可能的应用场景:即团队使用的是共享的文件系统(例如 NFS),团队中的每一个成员都能向访问本地文件系统一样访问它。



3.2 SSH 协议

SSH是Git最常用传输协议,这是应为SSH本身已经非常成熟且通用的访问协议了,Git基于SSH是非常聪明的选择。另外SSH是四种协议中唯一一个同时支持读写操作的网络协议。

一个典型的SSH协议的repo是这样的:

git clone user@gitserver:/path/to/my-project.git



3.3 GIT 协议

Git 协议是现存最快的传输协议。如果你在提供一个有很大访问量的公共项目,或者一个不需要对读操作进行授权的庞大项目,架设一个 Git 守护进程来供应仓库是个不错的选择。它使用与 SSH 协议相同的数据传输机制,但省去了加密和授权的开销。



3.4 HTTP/S 协议

HTTP 协议的好处是易于架设。几条必要的命令就可以让全世界读取到仓库的内容。

简单总结一下: 如果是公司的项目,SSH可能是你们团队唯一需要使用的协议。如果是开源项目或者是允许对项目进行匿名只读访问,那么除了SSH 协议之外,还需要支持Git或Http/s协议以便他人访问读取。



4 配置

实际上Git并无特别的配置,只是如果我们使用SSH协议进行数据传输的话我们需要创建专职的登陆账号和登入密钥,因此所谓的“配置”其实是SSH相关的配置。



4.1 GIT(SSH) SERVER端配置

创建Git用户和用户组

groupadd git
useradd -g git -d /var/git git

命令本省非常简单, 这里要解释的是为什么我们要创建这个git用户,这个用户不是为了运行Git而创建的专职用户,而仅仅是为了SSH访问而创建的。正如我们在前面“SSH协议”一节中提到的地址格式:

git clone user@gitserver:/path/to/my-project.git

这里的“user@gitserver”实质上就是SSH在登入时提供的用户和远程主机的命令行格式,所以说,既然我们需要使用SSH的方式登入并进行数据读写,总归是要有一个登入账户吧?OK,那就创建一个叫git专用账户来专门支持git的数据传输吧。

另外,我们把git用户的home目录设定为了/var/git, 用以区别一般的登入账户。而这个/var/git下,是放置所有repository的理想位置。

4.2 GIT(SSH) CLIENT端配置

同样的,并没有什么真正的git client端配置,还是SSH登陆的问题,无非就是为本地用后创建SSH密钥对,并把公钥拷贝到Server端git用户的~/.ssh/authorized_keys中,简单讲就是:只要本地能通过密钥登入git@gitserver就算是完成了客户端的配置。

关于配置SSH密钥登入,本文不再赘述。只是结合这里的场景重复一个角色:客户端要访问Git Server则应由客户端生成密钥,私钥客户端保存,公钥拷贝至Git Server的Git用户的authorized_keys文件中。

5 操作

配置完成之后,我们就可以在Server端创建(初始化)Repository了。假定的我们要创建的项目就叫“project”,我们在应该在Server端执行如下命令:

$ cd /var/git
$ mkdir project.git
$ cd project.git
$ git --bare init

参数–bare指明创建的是一个不包含工作目录的“裸”仓库。

接下来,某个客户端就可以把这个repo加为远程仓库,再推送一个分支,从而把第一个版本的项目文件上传到仓库里了。命令如下:

$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/var/git/project.git
$ git push origin master


一但有文件push到远程仓库,其他的客户端就可以clone了:

$ git clone git@gitserver:/var/git/project.git




(责任编辑:IT)
------分隔线----------------------------