我喜歡 github,我如今的我的代碼所有是託管在上面了,可是一些公司或者某些項目不適合放入github中,你但願能有一個徹底私有的倉庫,若是你有一臺服務器,這顯然是很容易辦到的事。git
下面簡單的描述我在某個項目中佈署的一個git服務,而且本地提交更新後,服務器將自動更新代碼到在線代碼的倉庫。github
root 用戶ssh登陸服務器,建立一個新用戶用來給git登陸及其操做,好比這裏我建立一個名爲「git」的用戶:shell
$ sudo add user git
進入到 /home/git 文件夾中,查看是否有 .ssh/ 目錄, 如沒有:vim
$ mkdir .ssh
進入 /home/git/.ssh 文件夾中,建立文件 authorized_keys服務器
等待ssh
進入 ~/.ssh/ 目錄,查看是否有 id_rsa.pub 文件,如沒有:post
$ ssh-keygen
一路回車,完成後,即可發現 ~/.ssh/ 目錄中有 id_rsa.pub, 複製其內容,粘貼到上面操做服務器的 authorized_keys 文件中測試
測試是否密鑰登陸成功google
$ ssh git@yourserverip
進入 /opt/git 目錄, 如沒有,建立之
創建倉庫文件夾,好比:
path:/opt/git $ mkdir gitdemo
將gitdemo用戶組設置爲當前用戶git
初始化爲遠程倉庫
$ git init --bare
上面的步驟已經完成了git遠程倉庫的建立,此時你只要將你本地的git代碼倉庫 git remote add git@yourserverip:/opt/git/gitdemo
,即可提交與更新代碼了。
好比我機器上的開發目錄爲:~/www/gitdemodev, 進行下面操做:
$ cd ~/www/gitdemodev $ git init #建一個文件,寫點東西進去 $ 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
如今你已經本地的代碼成功的提交到了遠程倉庫中,只需在你團隊成員電腦上做相同操做,即可利用git協同開發了,注意把各自電腦的 id_rsa.pub 內容複製進服務器的 authorized_keys 文件中。
假設你的項目也是跑在此臺服務器上,那自動佈署代碼就很簡單了,好比你的在線服務代碼在 /var/www/demo 文件夾中。
/var/www/demo也要有寫權限
你先初始化代碼庫:
$ git clone /opt/git/gitdemo /var/www/demo
而後你能夠經過 git pull
來更新代碼。
固然這樣是手動了,我想要的是本地提交更新後,服務器能自動的 git pull代碼到最新,因而咱們就要藉助 git hook
了。
進入到 /opt/git/gitdemo 文件夾中,會發現 .git/hook 文件夾在裏面,進入到 hook 中,裏面有不少的 sample 腳本,這裏咱們只須要用到 post-update。
$ mv post-update.sample post-update $ vim post-update
能夠看到裏面其實就是一些shell腳本,你要作的就是把 git pull寫進去。當用戶提交後,便會調用post-update腳本的。
好比我在服務器的代碼庫更新後,要求對應的服務代碼也要更新(進行pull操做),
則在bare倉庫的hooks中的post-receive添加以下內容便可
#!/bin/sh unset $(git rev-parse --local-env-vars) cd WEB_DIR git pull
這些腳本顯然是能夠作不少事的,只要你想獲得,要了解各腳本什麼時候調用,google吧。
注:服務器中與git用戶有關的文件夾及文件,請:
$ chown -Rh git:git /your/git/dirs