Git服务器搭建

Git服务器搭建

最近折腾了两个小项目,一直用的是WinSCP上传代码到服务器,由于是两个项目的缘故,又没有版本控制,所以修改了的东西都忘记了。索性搭建了一个git服务器,在这里跟大家分享一下整个搭建过程,还是比较详细地。

环境:

  1. Centos 6.4 vagrant搭建的虚拟机环境
  2. Git服务器 git-2.1.1
  3. Git客户端 git version 2.7.1.windows.2

一、Git编译安装

1.安装准备

安装依赖库

yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

2.安装Git

下载Git安装源码文件

# 切换到/home/download目录下
cd /home/download

# 下载源码
wget http://distfiles.macports.org/git/git-2.1.1.tar.gz

# 解压
tar zxvf git-2.1.1.tar.gz

# 进入Git源码目录
cd git-2.1.1

# root用户下安装
make prefix=/usr/local all
make prefix=/usr/local install

# 创建链接
ln -s /usr/local/bin/git /usr/bin/git

注:更多的Git版本可到http://distfiles.macports.org/git/进行下载

检查Git是否安装成功

git --version

注:如看到返回git version 2.1.1(版本不同返回不同)则表示Git已经安装成功

二、安装gitosis

1.安装准备

安装python

yum install python python-setuptools

2.gitosis安装

下载gitosis源码并安装

# 切换到/home目录下
cd /home    

# github上获取gitosis
git clone https://github.com/res0nat0r/gitosis

# 进入gitosis目录
cd gitosis/

#安装gitosis
python setup.py install

注:

1.安装成功后将会返回 Finished processing dependencies for gitosis==0.2

2.git clone https://github.com/res0nat0r/gitosis 过程中如遇到 Peer certificate cannot be authenticated with known CA certificates 错误(SSL认证错误)时,可使用如下命令进行解决

git config --global http.sslVerify false

三、gitosis配置部署

1.Git客户端创建密钥并上传至服务器

# 创建密钥(一直回车就OK)
$ ssh-keygen -t rsa

# 上传到服务器的 ~/ 目录下(这个密钥将会成为后面gitosis-admin.git这个管理库的唯一创建者)
$ scp ~/.ssh/id_rsa.pub root@192.168.33.10:~/

2.创建git用户,并使用git用户初始化gitosis

# 创建git用户
useradd -r -s /bin/sh -c 'git version control' -d /home/git git

# 创建git管理库目录
mkdir -p /home/git

# 设置权限(必需设置权限,否则后面操作会出现权限错误)
chown git:git /home/git

# 初始化gitosis生成管理库
sudo -H -u git gitosis-init < ~/id_rsa.pub

注:

1.初始化成功后将会返回如下信息

Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/ 
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

2.生成的/home/git/repositories/gitosis-admin.git库为Git的用户访问权限管理库,gitosis通过这个特殊git库来管理所有git库的访问权限,而从客户端上传的密钥id_rsa.pub将会成为gitosis-admin.git库的唯一创建者,并拥有管理其他git库的权限。

3.修改上传权限

chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

4.客户端导出管理库

# 创建文件夹(可以不用创建)
$ mkdir GitosisAdmin

# 进入文件夹
$ cd GitosisAdmin

# clone gitosis-admin.git库
$ git clone git@192.168.33.10:gitosis-admin.git

1.导出管理库的目的是为了方便地配置和修改版本控制的权限

2.在gitosis-admin文件中可以看到以下的文件目录

# git版本控制文件(不关注)
.git

# 访问权限用户公钥保存目录
keydir/         

# 文件用来设置用户、仓库和权限的控制文件
gitosis.conf

3.其实在keydir/目录下存放的就是我们通过ssh-keygen -t rsa生成并上传到服务器的那个密钥,下面贴出来给大家瞅瞅

# id_rsa.pub 中的密钥

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQq/P3DpktbDbKsCebVT4JW1i
+z6OPQTO7aq2xbvUEpCCgW9R2My28UWhWBuYIXy7vhjrAJ3kRsCP+JsudYcx29NE/kuLFwJsmk+zKGroaNqwUi2o5RO26g40OaJ5YqzcmxyH/R/
z79K7AXw4amRhd3vd12kQRuCp6H9PCxRVVNZz9Sc/
fD4sOYtysudCJKGHlFEAi5TBWq6udD6f3PfExdG4EPKcT60jbXnfvfrAQa3EUnN02xR7mKtJwGhmntiaabmSOhAociVf8ncp7FrPsF9drVoeOlX
qBJgG/f10hqwRQex4Auz7oqteYmDicXYfrjRCpwIhFt8s8I7BmB/qF Administrator@SINGLOW-PC


# keydir/Administrator@SINGLOW-PC.pub 中的密钥

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDQq/P3DpktbDbKsCebVT4JW1i
+z6OPQTO7aq2xbvUEpCCgW9R2My28UWhWBuYIXy7vhjrAJ3kRsCP+JsudYcx29NE/kuLFwJsmk+zKGroaNqwUi2o5RO26g40OaJ5YqzcmxyH/R/
z79K7AXw4amRhd3vd12kQRuCp6H9PCxRVVNZz9Sc/
fD4sOYtysudCJKGHlFEAi5TBWq6udD6f3PfExdG4EPKcT60jbXnfvfrAQa3EUnN02xR7mKtJwGhmntiaabmSOhAociVf8ncp7FrPsF9drVoeOlX
qBJgG/f10hqwRQex4Auz7oqteYmDicXYfrjRCpwIhFt8s8I7BmB/qF Administrator@SINGLOW-PC

注:可以看出两个密钥完全相同

5.创建新项目

1.gitosis.conf是用于权限控制

[gitosis]

[group gitosis-admin]                       # 组名称
members = Administrator@SINGLOW-PC          # 成员名,对应keydir目录下的公钥文件,多个成员用空格分开
writable = gitosis-admin                    # 项目名称

2.在服务器上新增一个项目控制权限(修改gitosis.conf配置文件)

[gitosis]

# git权限管理相关的配置
[group gitosis-admin]
members = Administrator@SINGLOW-PC
writable = gitosis-admin

# 新建项目
[group myproject]
members = Administrator@SINGLOW-PC
writable = myproject

3.push 权限控制到服务器

git add .

git commit -m 'add a new project myproject'

git push

4.客户端创建myproject并初始化项目

# 任意地方创建一个myproject文件夹
mkdir myproject

cd myproject

# 初始化
git init

# 创建一个空的md文件
touch README.md

# push
git add .

git remote add origin git@192.168.33.10:myproject.git

git commit -m 'create myproject project'

git push origin master

注:push成功后,可以在服务器的/home/git/repositories目录下发现gitosis自动为我们生成了一个myproject.git项目。

但是,但是,但是······

无论你在服务器怎么找你都找不到你刚才push到服务器上的README.md文件

正解:

在初始化远程仓库时最好使用:git –bare init,而不要使用:git init
如果使用了git init初始化,则远程仓库的目录下也包含work tree。当本地仓库向远程仓库push时,如果远程仓库正在push的分支上(如果当时不在push的分支,就没有问题), 那么push后的结果不会反应在work tree上,也即在远程仓库的目录下对应的文件还是之前的内容。

解决办法:

远程端必须运行命令:git reset –hard才能看到push后的内容。

5.服务器端挂载指定的目录

# 进入hooks目录
cd /home/git/repositories/myproject.git/hooks

# 添加work tree
vim post-receive

# 新增如下内容
GIT_WORK_TREE=/wwwroot/www.myproject.com  git checkout -f

# 写入权限
chmod +x post-receive   

# 建立work tree目录,如果目录不存在,git不会创建目录的
mkdir /wwwroot/www.myproject.com  -p

# 设置work tree权限
sudo chown -R git:git /wwwroot/www.myproject.com

注:work tree 为git的工作树,这一功能旨在让开发者易于在两个分支上同时工作,我这里利用它来进行web目录的挂载,这样客户端push过来的内容可以直接在线上环境中运行。

6.记得在起初我们为git专门创建了一个git用户,这里为了安全起见,我们需要禁用掉这个git用的shell登录权限

# 禁用shell登录
sudo vim /etc/passwd

# 将
git:x:497:497:git version control:/home/git:/bin/sh

# 修改为
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

至此GIT服务器搭建完毕!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值