搭建的过程中细节太多,也走了许多弯路,就不说了,主要谈一谈几个注意点:
1、一定要学会看错误提示
从错误提示上可以看到很多东西,比如提示你哪儿哪儿权限不够,你就应该知道去改权限
比较有用的两个命令:
chgrp -R [组名] [目录]
chmod -R g+rws [目录]
2、几个地方的git仓库
首先是/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 jpz@x.x.x.x:~/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