此贴为
CentOS下Git服务器搭建与客户端(windows和centos)搭建(http://blog.csdn.net/slovyz/article/details/48028109)后续完善版本
1.创建仓库
cd /home/data/git/ #此为我自己的仓库地址,根据自己情况自行更改
git init --bare project #创建git 版本库,默认初始化为空,project为仓库名,可以自定义,如(project.git....)
chown -R git:git project #赋与用户权限
=========================================================================================
2.创建git钩子
cd project/hooks #hooks为钩子所放文件夹
vim post-receive
#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
echo "now path is :"$NowPath
GitPath="/home/www/project" #project为web目录
echo "git path is :"$GitPath
cd $GitPath
echo "cd git path"
git add . -A && git stash # remove local changes
git pull origin master # pull data from master
# the follow line is also ok:
# git add . && git fetch origin && git reset --hard origin/master
echo "git done"
cd $NowPath
echo "fine"
# --- Finished
exit 0
保存,退出
chown git:git post-receive
chmod 755 post-receive
=========================================================================================
3.克隆仓库
打开web目录
cd /home/www/
git clone /home/data/git/project #克隆仓库
正克隆到 'project'...
warning: 您似乎克隆了一个空版本库。
完成。
[root@bogon www]# chown -R www:develop project/
[root@bogon www]# chmod -R 770 project/ #注意一定要给web目录赋予770权限,如果在上传文件时一直报错,一定跟用户和用户组和770权限有关
=========================================================================================
4.本地克隆
damon@DESKTOP-IKUPC6T MINGW64 ~
$ cd /f/project/
damon@DESKTOP-IKUPC6T MINGW64 /f/project
$ git clone git@yourip:/home/data/git/project
Cloning into 'project'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
在本地库上传一个文件测试钩子是否成功
damon@DESKTOP-IKUPC6T MINGW64 /f/project/project (master)
$ git add 1.txt
damon@DESKTOP-IKUPC6T MINGW64 /f/project/project (master)
$ git commit -m "1"
[master (root-commit) eec0431] 1
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 1.txt
damon@DESKTOP-IKUPC6T MINGW64 /f/project/project (master)
$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 192 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: now path is :/home/data/git/project
remote: git path is :/home/www/project
remote: cd git path
remote: fatal: bad revision 'HEAD'
remote: fatal: bad revision 'HEAD'
remote: fatal: Needed a single revision
remote: You do not have the initial commit yet
remote: From /home/data/git/project
remote: * branch master -> FETCH_HEAD
remote: * [new branch] master -> origin/master
remote: git done
remote: fine
To git@your ip:/home/data/git/project
* [new branch] master -> master
无报错,就证明已经上传成功了,在登上服务器看
已上传到web目录中,大功告成
不过在实际使用的时候,有人反馈说会有permission denied之类的事情。
这种事情大多发生在你Web Service使用的用户和git push的用户不一致的情况下。一般解决思路是这样的。首先把git用户加入web用户组,比如usermod -a -G web git.比如你把目标目录放在了/var/www/html/your_git下,那么你要检查下/var,/var/www,/var/www/your_git三个目录的权限是否至少开到了770上.然后还要考虑是否有SELinux在挡道,一般restorecon -R /var/www 下就可以了.