搭建的过程中细节太多,也走了许多弯路,就不说了,主要谈一谈几个注意点:
1、一定要学会看错误提示
从错误提示上可以看到很多东西,比如提示你哪儿哪儿权限不够,你就应该知道去改权限
比较有用的两个命令:
chgrp -R [组名] [目录] chmod -R g+rws [目录]
首先是/home/git/下的xx.git库,这就是我们的主角——git中心服务器,这是一个裸库,即用git init --bare --shared 创建的,只负责维护修改历史,不负责创建工作路径,所以无论怎么提交(push),该目录下也只会有xx.git,而没有其余东西,不要感到奇怪。
第二个地方是/var/www/html/xx下面的git库,这是用于部署代码的git库,这里面的内容会直接受apache服务器处理,注意这不是裸库,因为我们需要给apache提供真实存在的文件。
第三个地方是/home/jpz/下的xx.git库,严格意义上来讲这并不是一个独立的git库,而是通过软连接的方式(ln -s)链接到我们第一个提到的裸库上,这样我们就可以通过ssh连接用户jpz的方式从网络上进行各种git操作。
第四~n个地方,就是我们刚才提到的可以通过ssh连接jpz用户从任何一个角落clone git库,然后进行git init等后续操作。
3、自动部署
编写hooks下面的post-receive,注意用env -i来忽略环境变量,因为git pull使用的默认路径的不是PWD
下面贴出我的部分尝试经过,不想整理了:
ssh x.x.x.x -l root apt-get install git-core groupadd developers cd /home/ mkdir git useradd git -d /home/git vi /etc/group developers:x:1000:git cd /home/git mkdir test cd /test git init cd .. chgrp developers test chmod g+rws test cd /test chgrp developers .git chmod g+rws .git useradd jpz -m -s /bin/bash passwd jpz cd /var/www/html ln -s /home/git/test test git init --bare --shared .git vi /etc/group developers:x:1000:git,jpz su jpz ln -s /home/git/test gitrep exit git clone [email protected]:~/gitrep/.git git pull vi test_git.html git push On branch master Your branch is based on 'origin/master', but the upstream is gone. (use "git branch --unset-upstream" to fixup) git branch --unset-upstream git push origin master remote: error: insufficient permission for adding an object to repository database ./objects ssh x.x.x.x -l root cd /home/git/test/.git/objects chmod g+rws * exit git push origin master git push -u origin master --delete all cd /home/git mkdir web_foo.git chgrp developers web_foo.git/ chmod g+rws web_foo.git/ git clone /home/git/web_foo.git cd web_foo git init git pull vi test_git.html git add test_git.html git commit -am "test git" git push -u origin master vi test_git.html git commit -am "add sth" git push