云主机搭建Git服务器

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。由于其分布式的特点,我们完全可以只在本地保存整个项目仓库,但考虑多人协作的需求,一般情况是建立一个远程仓库,项目的所有开发者都围绕这个远程仓库进行同步和提交。虽然Github已经免费提供了这样的远程仓库给用户,但这种仓库一般是全网公开,即所有人都可以看到里面的提交。如果我们自己有云主机(最好是Linux系统)的话,要搭建一个Git服务器创建远程仓库并不难,现在让我们开始吧。

远程仓库

搭建Git服务器不需要什么复杂的工具,因为git这个工具已经包括所有的功能。

安装git

一般Linux的发行版已经内置git,如果没有的话安装一下

sudo apt-get install git

sudo adduser git

该用户是用来运行我们git服务器的,在云主机上与我们的普通用户区分。当我们的本地git客户端与远程仓库交互时,云主机上用来运行git程序的用户就是我们刚添加的git了。对该用户设置一下密码:

sudo passwd git

禁用登陆git

由于用户git主要作为仓库使用,一般人员不可以也不应该登陆和进入git,所以使用工具git-shell禁止用户git登陆shell。

先在/etc/shells中加入/usr/bin/git-shell作为可用shell;

sudo vim /etc/shells

然后改变用户git的默认shell。

sudo chsh git -s git-shell

创建仓库

由于用户git已经禁止登陆了,我们直接使用root权限在/home/git目录上创建所有远程仓库的目录srv/

sudo mkdir /home/git/srv

此时可以在srv/上创建一个空的远程仓库,命令为:

sudo cd /home/git/srv

sudo git init --bare elephant.git

其中--bare参数表示裸仓库,一般会将远程仓库初始化为裸仓库。

现在最好设置好仓库的权限,由用户git来管理,其他用户无管理权限。

sudo chown -R git /home/git/srv

sudo chmod -R 770 /home/git/srv

客户端登陆

现在客户端需要与远程仓库同步,可以用ssh进行登陆,而且git也支持ssh连接。

客户端需要创建ssh-key,使用ssh-keygen创建公钥私钥

ssh-keygen -t rsa -C "xxx@email.com"

Windows一般把生成的公钥私钥放在

C:Usersxxxx.ssh

把.sshid_rsa.pub(公钥)的内容拷贝出来,放置到云主机的git用户的/home/git/.ssh/authorized_keys()中,表示已认证过的公钥。

此时,在本地git客户端则可以使用以下命令拉取到远程仓库了

git clone git@server:srv/elephant.git了

上面的仓库地址中,git表示云主机的用户git,server表示主机地址,即云主机的ip,加上后面的内容则表示云主机上的/home/git/srv/elephant.git这个裸仓库。