CentOS下的Git服務器:Gitosis
我們很多人知道Git可能是從Github開始的。因為Github是如此流行,幾乎所有寫代碼的人都知道它,以至于一提到Git就以為是Github,其實兩者并沒有多少關系,只是名字類似而已(這有點像Java和JavaScript)。
實際上,Git是一個分布式版本控制軟件,原來是Linux內核開發者Linus Torvalds為了更好地管理Linux內核開發而創立的。雖然Git比SVN優秀很多,但它們最初被設計出來的想法是一致的,那就是版本控制。而Github卻是一個網站,充當Git公共服務器的作用,只要擁有Github賬號的人都可以把自己的項目托管在那里,如果你舍不得花些錢,你的項目是強制公開的。所以,Github就是一個通過Git協議為眾多開發者提供代碼托管的地方,同時它提供了很多特性,第一次使得大家可以這么公開地討論起各自的項目。
上面之所以說這么多,是因為今天要講的Gitosis有點類似Github的功能。什么意思呢?就是我們可以在自己的服務器上安裝Gitosis,那么這臺服務器就可以向Github一樣對外提供代碼托管服務了,這對于很多不愿意把自己的代碼公諸于世的公司來說最好不過了。
這里以CentOS充當服務器為例給大家講解一下Gitosis的安裝和配置。同時,你還需要另外一臺PC,當然Linux、Mac主機也是可以的。之所以要兩臺機器,是因為一臺做服務器,另外一臺充當客戶端。甚至,你可以將所有下面講的在同一臺機器上完成。
【服務端】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-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)。
【客戶端】下面需要在開發機克隆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的格式如下:
[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項目。
來自:http://my.oschina.net/csensix/blog/184426