1. 程式人生 > >ubuntu14.04搭建git伺服器、遠端倉庫、自動部署

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