菜鸟新作,老鸟勿喷
安装git需要的库文件
# yum install curl-develexpat-devel gettext-devel openssl-devel zlib-devel perl-devel
安装libcionv
tar -zxflibiconv-1.14.tar.gz
cd libiconv-1.14
./configure--prefix=/usr/local/libiconv
make &&make install
安装git
tar -zxfgit-2.0.4.tar.gz
cd git-2.0.4
./configure--prefix=/usr/local/git --with-iconv=/usr/local/libiconv/
make &&make install
添加环境变量
# vim /etc/profile
exportPATH=$PATH:/usr/local/git/bin
#source /etc/profile
#git --version
出现版本信息,说明安装成功
创建软连接,否则git clone时候会报错
# ln -s/usr/local/git/bin/* /usr/bin/
#git --version
安装gitosis
# yum install python python-setuptools
#git clonegit://github.com/res0nat0r/gitosis.git
#cd gitosis/
#python setup.pyinstall
Installed/usr/lib/python2.4/site-packages/gitosis-0.2-py2.4.egg
Processingdependencies for gitosis==0.2
初始化gitosis
因为刚刚安装完的gitosis,是什么都没有的,所以必须要初始化一下,让它生成配置文件,代码仓库,才可以生效
添加git用户
#groupadd git
# useradd –g git git
客户端(开发机):
$ ssh-keygen -trsa
一路回车,就会在宿主目录下的.ssh目录下生成id_rsa.pub公钥
传到服务器,根据自己习惯,传到服务器git用户能访问的地方
git服务器:
#su - git
$gitosis-init <id_rsa.pub
此步执行完之后,会在git宿主目录中生成一个代码仓库目录,其中里面包括的git-admin.git,就是权限管理用的
PS:
上面的步骤,网上99%的的资料都是这么写的,其实也可以在git服务器本地生成个密钥,来初始化gitosis,但是不同用户的公钥是不同的,你第一次使用哪个用户的公钥,只能在这个用户下进行后面的操作
$git clone ssh://git@ipaddress:port/gitosis-admin.git
$ls
gitosis.conf keydir
gitosis.conf里就是项目管理的配置文件,简单易懂,keydir目录里,是开发机的密钥,这里的密钥必须以.pub为后缀,pub前面的名称,要和gitosis.conf里members里的成员名称一致才生效,至于怎么权限分配管理,根据gitosis-admin举一反三,很容易
如果想添加开发成员dev007,那么,先取得dev007的公钥,然后在keydir里编辑一个dev007.pub文件,将dev007的公钥粘贴进去,在将gitosis.conf的members后面加上dev007
这还没有完,因为gitosis是以代码库形式存在的,我们刚刚编辑的是下载到本地的,所以还要提交,才能生效
$git add .
$git commit -m "1"
$git push
这样,才能使刚才的配置生效,在第一次提交过程中,可能会出现一些提示,比如让你先发送用户名,用户邮箱之类的,根据提示操作就可以了.
创建裸仓库
# git init --bare project.git
Initialized emptyGit repository in /data/git/project/
这里一定要git结尾,否则很麻烦,以git结尾之后,你git clone时候不用加路径,直接项目名.git就可以了,例如
$git clone ssh://git@ipaddress:port/project.git
Git的常用clone方式
$ git clone git@192.168.1.171:/data/git/project.git
$ git clone file:///data/git/project.git project
$ git clone ssh://user@ip:project.git
最简单的使用流程
下载
$git clone ssh://git@ipaddress:port/projectname.git
$touch tt.txt
$Git add tt.txt
$Git commit –m “tt”
$Git push
关于钩子
由于公司是搞网站开发的,之前用的是svn,所以对钩子还是相当有依赖性的,看了不少关于git钩子的资料,但对于刚接触git的我还是感觉两眼昏花,所以就偷个懒,自己写了一个,功能最简单的傻瓜式钩子,原理就是,远端开发机提交,这边钩子被触发,执行我傻瓜式的shell脚本,把我们网站目录的代码给更新一下(git pull)
先进入bare仓库的hook目录
#vim post-receive
#!/bin/sh
# Usage:
# 1. put this into the post-receive hook file itself below
# 2. `chmod +x post-recive`
# 3. Done!
# Check the remote git repository whether it is bare
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE"
exit 1
fi
# Check the deploy dir whether it exists
WEB_DIR=/data/htdocs/html/
if [ ! -d $WEB_DIR ] ; then
echo >&2 "fatal: post-receive: DEPLOY_DIR_NOT_EXIST: \"$WEB_DIR\""
exit 1
fi
# Goto the deploy dir and pull the latest sources
cd $WEB_DIR
#env -i git reset --hard
env -i git pull
这样,在远端执行git pull时候,这个钩子会被触发,更新你指定的网站目录
如果远端执行时候,提示错误,有可能是你的权限分配问题,可以把git用户加入到权限管理中,让git用户在你代码仓库中有执行钩子的权限