在遠程倉庫一節中,咱們講了遠程倉庫實際上和本地倉庫沒啥不一樣,純粹爲了7x24小時開機並交換你們的修改。git
GitHub就是一個免費託管開源代碼的遠程倉庫。可是對於某些視源代碼如生命的商業公司來講,既不想公開源代碼,又捨不得給GitHub交保護費,那就只能本身搭建一臺Git服務器做爲私有倉庫使用。github
搭建Git服務器須要準備一臺運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,經過幾條簡單的apt
命令就能夠完成安裝。shell
假設你已經有sudo
權限的用戶帳號,下面,正式開始安裝。安全
第一步,安裝git
:bash
$ sudo apt-get install git
第二步,建立一個git
用戶,用來運行git
服務:服務器
$ sudo adduser git
第三步,建立證書登陸:app
收集全部須要登陸的用戶的公鑰,就是他們本身的id_rsa.pub
文件,把全部公鑰導入到/home/git/.ssh/authorized_keys
文件裏,一行一個。ssh
第四步,初始化Git倉庫:工具
先選定一個目錄做爲Git倉庫,假定是/srv/sample.git
,在/srv
目錄下輸入命令:版本控制
$ sudo git init --bare sample.git
Git就會建立一個裸倉庫,裸倉庫沒有工做區,由於服務器上的Git倉庫純粹是爲了共享,因此不讓用戶直接登陸到服務器上去改工做區,而且服務器上的Git倉庫一般都以.git
結尾。而後,把owner改成git
:
$ sudo chown -R git:git sample.git
第五步,禁用shell登陸:
出於安全考慮,第二步建立的git用戶不容許登陸shell,這能夠經過編輯/etc/passwd
文件完成。找到相似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改成:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣,git
用戶能夠正常經過ssh使用git,但沒法登陸shell,由於咱們爲git
用戶指定的git-shell
每次一登陸就自動退出。
第六步,克隆遠程倉庫:
如今,能夠經過git clone
命令克隆遠程倉庫了,在各自的電腦上運行:
$ git clone git@server:/srv/sample.git Cloning into 'sample'... warning: You appear to have cloned an empty repository.
剩下的推送就簡單了。
若是團隊很小,把每一個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys
文件裏就是可行的。若是團隊有幾百號人,就無法這麼玩了,這時,能夠用Gitosis來管理公鑰。
這裏咱們不介紹怎麼玩Gitosis了,幾百號人的團隊基本都在500強了,相信找個高水平的Linux管理員問題不大。
有不少不但視源代碼如生命,並且視員工爲竊賊的公司,會在版本控制系統裏設置一套完善的權限控制,每一個人是否有讀寫權限會精確到每一個分支甚至每一個目錄下。由於Git是爲Linux源代碼託管而開發的,因此Git也繼承了開源社區的精神,不支持權限控制。不過,由於Git支持鉤子(hook),因此,能夠在服務器端編寫一系列腳原本控制提交等操做,達到權限控制的目的。Gitolite就是這個工具。
這裏咱們也不介紹Gitolite了,不要把有限的生命浪費到權限鬥爭中。