我喜歡 github,我現(xiàn)在的個(gè)人代碼全部是托管在上面了,但是一些公司或者某些項(xiàng)目不適合放入github中,你希望能有一個(gè)完全私有的倉(cāng)庫(kù),如果你有一臺(tái)服務(wù)器,這顯然是很容易辦到的事。
下面簡(jiǎn)單的描述我在某個(gè)項(xiàng)目中布署的一個(gè)git服務(wù),并且本地提交更新后,服務(wù)器將自動(dòng)更新代碼到在線代碼的倉(cāng)庫(kù)。
創(chuàng)建用戶并使客戶機(jī)可通過(guò)密鑰登錄服務(wù)器
服務(wù)器中操作:
- 
root 用戶ssh登錄服務(wù)器,創(chuàng)建一個(gè)新用戶用來(lái)給git登錄及其操作,比如這里我創(chuàng)建一個(gè)名為“git”的用戶: $ sudo add user git 
- 
進(jìn)入到 /home/git 文件夾中,查看是否有 .ssh/ 目錄, 如沒(méi)有: $ mkdir .ssh 
- 
進(jìn)入 /home/git/.ssh 文件夾中,創(chuàng)建文件 authorized_keys 
- 
等待 
客戶機(jī)中操作:
- 
進(jìn)入 ~/.ssh/ 目錄,查看是否有 id_rsa.pub 文件,如沒(méi)有: $ ssh-keygen 
- 
一路回車,完成后,便可發(fā)現(xiàn) ~/.ssh/ 目錄中有 id_rsa.pub, 復(fù)制其內(nèi)容,粘貼到上面操作服務(wù)器的 authorized_keys 文件中 
- 
測(cè)試是否密鑰登錄成功 $ ssh git@yourserverip 
創(chuàng)建git服務(wù)器遠(yuǎn)程倉(cāng)庫(kù)
- 進(jìn)入 /opt/git 目錄, 如沒(méi)有,創(chuàng)建之
- 
建立倉(cāng)庫(kù)文件夾,比如: # path: /opt/git $ mkdir gitdemo 
- 
初始化為遠(yuǎn)程倉(cāng)庫(kù) $ git init --bare 
上面的步驟已經(jīng)完成了git遠(yuǎn)程倉(cāng)庫(kù)的創(chuàng)建,此時(shí)你只要將你本地的git代碼倉(cāng)庫(kù) git remote add git@yourserverip:/opt/git/gitdemo,便可提交與更新代碼了。
比如我機(jī)器上的開發(fā)目錄為:~/www/gitdemodev, 進(jìn)行下面操作:
$ cd ~/www/gitdemodev
$ git init
#建一個(gè)文件,寫點(diǎn)東西進(jìn)去
$ touch README | echo 'hello git' > READEME 
$ git add README
$ git remote add origin git@yourserverip:/opt/git/gitdemo
$ git commit -m 'first commit'
$ git push origin master
現(xiàn)在你已經(jīng)本地的代碼成功的提交到了遠(yuǎn)程倉(cāng)庫(kù)中,只需在你團(tuán)隊(duì)成員電腦上作相同操作,便可利用git協(xié)同開發(fā)了,注意把各自電腦的 id_rsa.pub 內(nèi)容復(fù)制進(jìn)服務(wù)器的 authorized_keys 文件中。
git hook 自動(dòng)布署代碼
假設(shè)你的項(xiàng)目也是跑在此臺(tái)服務(wù)器上,那自動(dòng)布署代碼就很簡(jiǎn)單了,比如你的在線服務(wù)代碼在 /var/www/demo 文件夾中。
你先初始化代碼庫(kù):
$ git clone /opt/git/gitdemo /var/www/demo
然后你可以通過(guò) git pull 來(lái)更新代碼。
當(dāng)然這樣是手動(dòng)了,我想要的是本地提交更新后,服務(wù)器能自動(dòng)的 git pull代碼到最新,于是我們就要借助 git hook了。
進(jìn)入到 /opt/git/gitdemo 文件夾中,會(huì)發(fā)現(xiàn) .git/hook 文件夾在里面,進(jìn)入到 hook 中,里面有很多的 sample 腳本,這里我們只需要用到 post-update。
$ mv post-update.sample post-update
$ vim post-update
可以看到里面其實(shí)就是一些shell腳本,你要做的就是把 git pull寫進(jìn)去。當(dāng)用戶提交后,便會(huì)調(diào)用post-update腳本的。
這些腳本顯然是可以做很多事的,只要你想得到,要了解各腳本何時(shí)調(diào)用,google吧。
【注】服務(wù)器中與git用戶有關(guān)的文件夾及文件,請(qǐng):
$ chown -Rh git:git /your/git/dirs 

 
                         
                                
 
                                



 
                        
