您的位置:首页 > 运维架构 > Linux

CentOS 安装Git 服务器

2017-03-16 15:49 465 查看


关于Git

Git是分布式版本控制系统的一个完美实现,它与集中式版本控制系统SVN的基本区别如下:

1、Git是分布式的,而SVN不是

2、Git和SVN一样有自己的集中式版本库或服务器。但,GIT更倾向于被使用于分布式模式,也就是每个开发人员从中心版本库/服务器上chect out代码后会在自己的机器上克隆一个自己的版本库。

3、Git将内容按元数据方式存储,而SVN是按文件

所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。如果你把.git目录的体积大小跟.svn比较,你会发现它们差距很大。因为,.git目录是处于你的机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签,分支,版本记录等。

4、Git分支和SVN分支的不同

SVN的分支就是版本库中的另外一个目录,而Git的分支却是整个版本库的一个快照,而且可以在同一个工作目录下快速的在几个分支间切换。

5、Git没有一个全局的版本号,而SVN有

SVN的版本号实际是任何一个相应时间的源代码快照。而Git并没有这样的一个全局版本号,这也是Git缺少的最大的一个特征

6、Git的内容完整性要优于SVN

Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

 

Git的基本工作流程如下:

在工作目录中修改某些文件。

对修改后的文件进行快照,然后保存到暂存区域。

提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。


Git的安装和配置

(1) 使用yum源安装git

yum install git


查看git版本号

git --version


输出:

version 1.9.0


(2) 创建git用户并设置密码

useradd -m git
passwd git //可以设置一个密码,建议不设密码



gitosis的安装

(1) python-setuptools的安装(因为gitosis的安装脚本是用python写的,已经安装过python的不需要再安装)
yum install python-setuptools


(2) gitosis 的安装
git clone https://github.com/cdiwo/gitosis.git //下载gitosis到你想存放的目录下
cd gitosis
python setup.py install //如果没有报错,则说明安装成功


(3) 创建是用这个git server的用户的公钥

因为gitosis的访问是通过ssh访问的,所以我们还需要创建一个ssh的访问公钥。找另外一台机器(如果条件允许)作为git server的客户端机器创建公钥,然后传到git服务器上。
su git
ssh-keygen -t rsa


一路按回车,默认会生成 /home/git/.ssh/id_rsa.pub 公钥文件,有了密钥以后便可初始化gitosis,使gitosis获得对Git的管理权限
su
gitosis-init < /home/git/.ssh/id_rsa.pub


如果使用另外一台客户端机器A生成公钥,那么将它传到服务器/tmp目录下再初始化gitosis也是可以的
gitosis-init < /tmp/id_rsa.pub


执行完成后,提示
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/


表示初始化成功,会在/home/git/repositories创建gitosis-admin.git项目,可以通过维护这个项目来对gitosis进行配置。

除此以外,还需要对gitosis-admin.git/hooks/post-update目录赋上特殊权限:
chmod u+x /home/git/repositories/gitosis-admin.git/hooks/post-update


至此,服务器端的gitosis配置就完成了。


Git 资源库和权限管理

(1) 创建并初始化资源库
cd /home/git
mkdir test.git
git init --bare


测试新创建的资源库是否可用
cd /home/test/
git clone /home/git/test.git


如果显示" Initialized empty Git repository in /home/git/test.git",则说明成功的clone了一个local repository。之后就可以在此repository下进行开发了,比如,添加一个readme.txt文件
vi readme.txt
git add . #注意后面有个".", 表示当前目录
git commit -a
git push origin master


注意:如果此时报错,最大的原因是test.git的refs和objects目录的权限不够,执行如下操作即可(git server端的repository下的这两个目录)。
chmod -R 777 refs/
chmod -R 777 objects/


(3) 检出 gitosis
git clone git@192.168.x.xx:/home/git/repositories/gitosis-admin.git


(4) 配置gitosis

cd gitosis-admin
vi gitosis.conf
# vi 会看到下面的内容
[gitosis]
[group gitosis-admin] #组名称
writable = gitosis-admin #可写资源库列表,多个资源库使用”空格“隔开
members = git@myname.local #用户列表,多个用户使用”空格“隔开

#如果新增一个可读写用户,需要将公钥复制到key_dir当中,并修改gitosis.conf文件



Git Hooks 自动部署

git 本地提交后,每次都要到服务器上pull才能更新代码,这是一件很麻烦事情,如果你的应用环境和git资源库在同一台服务上,那么我们可以使用git的hooks自动更新代码,下面提供一种最简单的操作方式:

(1) 创建 post-receive 文件

cd hooks
vi post-receive


(2) 修改 post-receive 文件,将下面的代码复制到打开的post-receive文件中

#!/bin/sh
export LANG=zh_CN.UTF-8
cd /home/wwwroot/test/code #服务器发布路径
unset GIT_DIR #注意如果没这句,将会提示"fatal: Not a git repository: '.'"错误
git pull origin master


(3) 给 post-receive 可执行权限

chmod +x post-receive


(4) 客户端执行pull操作

vi README #随便添加一个文件或内容
git add .
git commit -m 'Add README'
git push


执行完成后,如果提示"remote: error: 无法打开 .git/FETCH_HEAD",修改服务器发布路径中的 .git 文件夹权限为777。


其他

如果使用本地生成public密钥上传到服务器,需要将id_rsa.pub的内容添加到服务器~/.ssh/authorized_keys中,这样就可以免密码登录了。

cat id_rsa.pub >> authorized_keys


注意:目录.ssh和authorized_keys的权限必须是600

密钥的拷贝方式也可以在本地生成后,通过 ssh-copy-id 命令复制到服务器端:
ssh-keygen
ssh-copy-id git@serverhost



处理非标准SSH端口的git clone命令连接

使用
git clone
命令
clone
项目时,如果repository的
SSH
端口不是标准
22
端口时(例如,
SSH
tunnel
模式,等等),可以使用如下命令:
git clone ssh://git@host:port/.../xxx.git


举例如下:
git clone ssh://git@120.27.50.136:2222/home/test.git
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: