CentOS下的Git服務器:Gitosis

咱們不少人知道Git多是從Github開始的。由於Github是如此流行,幾乎全部寫代碼的人都知道它,以致於一提到Git就覺得是Github,其實二者並無多少關係,只是名字相似而已(這有點像Java和JavaScript)。 python

實際上,Git是一個分佈式版本控制軟件,原來是Linux內核開發者Linus Torvalds爲了更好地管理Linux內核開發而創立的。雖然Git比SVN優秀不少,但它們最初被設計出來的想法是一致的,那就是版本控制。而Github倒是一個網站,充當Git公共服務器的做用,只要擁有Github帳號的人均可以把本身的項目託管在那裏,若是你捨不得花些錢,你的項目是強制公開的。因此,Github就是一個經過Git協議爲衆多開發者提供代碼託管的地方,同時它提供了不少特性,第一次使得你們能夠這麼公開地討論起各自的項目。 git

上面之因此說這麼多,是由於今天要講的Gitosis有點相似Github的功能。什麼意思呢?就是咱們能夠在本身的服務器上安裝Gitosis,那麼這臺服務器就能夠向Github同樣對外提供代碼託管服務了,這對於不少不肯意把本身的代碼公諸於世的公司來講最好不過了。 github

這裏以CentOS充當服務器爲例給你們講解一下Gitosis的安裝和配置。同時,你還須要另一臺PC,固然Linux、Mac主機也是能夠的。之因此要兩臺機器,是由於一臺作服務器,另一臺充當客戶端。甚至,你能夠將全部下面講的在同一臺機器上完成。 shell

【服務端】Gitosis是用Python編寫的,因此,在初始化一些環境的時候,要特別注意。經過下面的命令安裝全部須要的軟件。 服務器

yum install -y python python-setuptools git-core
git clone git://github.com/res0nat0r/gitosis.git
cd gitosis
python setup.py install

【客戶端】軟件安裝完以後就是作必要的配置。因此,須要在你進行開發的客戶端生成ssh公鑰來初始化gitosis。注:爲了管理方便,我同時把這臺CentOS當作服務器和客戶端,PC端我會用PC字樣標明。由於有一臺外網可以訪問的服務器能夠很方便的管理公鑰。若是你把gitosis-admin項目在家裏的電腦上管理,一旦你離開家就沒辦法增長新項目或者添加新用戶了。 ssh

ssh-keygen -t rsa
scp ~/.ssh/id_rsa.pub root@xxx:/tmp/

【服務端】下面就利用剛纔上傳的公鑰初始化gitosis 分佈式

#新建一個git用戶
useradd -m git
su - git
gitosis-init</tmp/id_rsa.pub

這樣會在/home/git下面生成gitosis和repositories兩個目錄,後者即爲存放公共庫的目錄。確保/home/git/repositories/gitosis-admin.git/hooks/post-update具備執行權限(755)。 post

【客戶端】下面須要在開發機克隆gitosis-admin.git項目,它是用來管理全部git項目及用戶的。 網站

git clone git@localhost:gitosis-admin.git #由於是同一臺機器,因此能夠用localhost

【客戶端】爲何這裏能夠直接經過clone命令克隆項目,就是由於gitosis-init初始化的時候使用了客戶端生成的公鑰。在gitosis-admin項目下有一個gitosis.conf文件和一個keydir目錄。gitosis.conf用來配置git項目和用戶,keydir存放用戶的公鑰,這裏的公鑰對命名有嚴格要求,要是 用戶名.pub,必須以.pub後綴結尾。gitosis.conf的格式以下: spa

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = username #對應keydir下有一個 username.pub 公鑰文件

【客戶端】如今能夠按照這個格式增長新的項目。

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = username #對應keydir下有一個 username.pub 公鑰文件

[group new-project]
writable = new-project
members = newuser #多個用戶用空格分開

在PC端,一樣用ssh-keygen命令生成公鑰和私鑰,並把公鑰上傳到keydir目錄下,重命名爲newuser.pub,更新gigosis-admin項目。


#在CentOS機器上克隆的gitosis-admin項目下執行下面的命令
git add .
git commit -a -m "add newuser"
git push
完成以後,服務器就已經作好了接受新項目的準備。這個時候服務器端還不會生成new-project.git項目,等PC端push以後會自動生成。


PC端執行下面的命令。

#隨便在什麼目錄都行

mkdir new-project
cd new-project
git init
git add .
git commit -a -m "initial new-project"

【PC端】新建項目以後須要把本地的這個庫和服務器上配置的new-project關聯起來,執行下面的命令能夠完成這個任務,並且gitosis會自動在服務器上生成new-project.git項目。

git remote add origin git@xxx:new-project.git
git push origin master

這樣,本地的項目就和服務器上的項目實現了關聯,意味着你擁有了一臺本身的git server,你徹底能夠在別的電腦上克隆剛纔添加的new-project.git項目了,也能夠隨意添加新的用戶,記住要用空格隔開,還要上傳公鑰到keydir目錄下並update gitosis-admin項目。

相關文章
相關標籤/搜索