ubuntu14.04搭建git服务器、远端仓库、自动部署

搭建的过程中细节太多,也走了许多弯路,就不说了,主要谈一谈几个注意点:

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 [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


你可能感兴趣的:(git,服务器)