搭建git服务器

远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改。

搭建Git服务器需要准备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简单的apt命令就可以完成安装。

假设你已经有sudo权限的用户账号,下面,正式开始安装。

第一步,安装git

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

当然对于安全性要求不高,而且自己使用时,没有人会修改服务器的内容,那么就可以在常用的当前用户下配置就可以。也不用下文提到的禁用shell登录。

第三步,创建证书登录:

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
没有的话使用ssh-keygen -t rsa -C "[email protected]"

第四步,初始化Git仓库:

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ git init --bare sample.git

新建git仓库库时,不要sudo权限,否则push时不使用sudo权限,就后出现推送失败。

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

$ sudo chown -R git:git sample.git

第五步,禁用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每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就简单了。

注:远程的服务器的仓库,只是用来交换使用的,不会在服务器的git仓库下工作,因此上文都禁止shell登录。如果可以进入服务器的仓库下,使用常用的git命令也是无效的。
比如执行git status,会出现如下:
fatal: this operation must be run in a work tree
创建服务器的仓库时指定--bare参数,使得git仓库没有工作区,不能进行修改,也就不需要类似git status的命令。

git clone git@server:/srv/sample.git
该命令默认情况下,是clone远程仓库的maser分支。
如果想要clone指定分支
git clone -b <分支名> 仓库地址

例子:
server:服务器新建sample.git 空仓库

git init --base sample.git

work1:

git remote add origin  user@server:/tmp/sample.git  //关联仓库
//当前所在分支memetic_dev
//推送memetic_dev分支到远程仓库sample的memetic_dev,远程仓库不存在任何分支,因此会新建分支,并与本地的分支进行关联跟踪
git push -u origin memetic_dev 
//push完成后,服务器的sample仓库只有一个分支就是memetic_dev分支,并不存在master分支

work2:

git clone user@server:/tmp/sample.git
//clone默认是clone master分支,但是sample仓库只有推送的memeic_dev分支,因此要clone指定分支
git clone -b memetic_dev user@server:/tmp/sample.git

你可能感兴趣的:(搭建git服务器)