Linux(CentOS) 上搭建Git服务器

有时,我们常常需要一个私有的仓库来存放源代码,github私有仓库是收费的,自己搭建一个gitlab又显得没有必要,那么我们可以在服务器上搭建一个git的服务端,它提供了git的所有功能,关键是足够轻量,对于几个人的小团队非常适合。这也是运维发布管理的常用方式。下面我将在CentOS 7.3上安装与配置,过程非常简单。

1. 安装git
$ git --version
$ yum install -y git

2. 创建一个git用户,用来运行git服务
$ adduser git
$ mkdir /home/git/.ssh
$ vi /home/git/.ssh/authorized_keys  解释:暂时建个空文件,后面会用到
$ chown -R git:git /home/git/.ssh
$ chown -R git:git /home/git/.ssh/authorized_keys
/home/git/.ssh/authorized_keys 这个文件用来存储公钥的,每行存储一个

3. 生成公钥
公钥要在客户端生成,即在本地客户端的git bash中通过命令来生成
$ ssh-keygen -t rsa -C"master@goasy.com"
命令生成公钥,默认在c盘(C:\Users\tom\.ssh\id_rsa.pub):tom是你计算机名字,C:\Users目录下自然可以看见这个名字,用记事本打开id_rsa.pub,复制粘贴到服务器的/home/git/.ssh/authorized_keys文件中即可


4. 服务器中建立git仓库
$ mkdir /git
$ chown -R git:git /git
创建一个空仓库,并修改所有者
$ cd /git
$ git init --bare sample.git
$ chown -R git:git sample.git

5. 禁止git用户登录shell
出于安全考虑,创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成,找到类似下面的一行
git:x:1000:1000::/home/git:/bin/bash 
改为: 
git:x:1000:1000::/home/git:/usr/bin/git-shell
其实就是将/bin/bash改成/usr/bin/git-shell,前面那段每个系统可能会有些不同。这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出

6. 克隆git服务器上建立的sample.git仓库
在本地git bash中通过命令定位到某个用于存放克隆文件的文件夹下,输入如下克隆命令
$ git clone git@192.168.1.102:/git/sample.git


7. 将本地git仓库与git服务器仓库关联
在本地新建并初始化一个sample仓库,需要和git服务器上的仓库名称相同
git服务器上建立的仓库为sample.git,本地的不用带.git
服务器和本地的仓库都有了,通过以下步骤将两者关联起来,在本地git bash中定位到本地仓库,输入并执行下方代码
$ git remote add sample git@xxx.xxx.xxx.xxx:/git/sample.git
在git bash输入:$ git remote -v 可以查看本地git仓库相关联的远程git仓库
在git bash输入:$ git push -u sample master 推送本地仓库主分支到远程git仓库,首次推送需要加-u
以后推送直接用在git bash输入:$ git push sample master 即可

总结:如果是新仓库,就无需第7步了,第7步也可以把之前仓库的文件copy到新的仓库,从新提交,这么做之前仓库的log会全部丢失。
Posted by 何敏 on 2017/08/07 10:27:15