1. 程式人生 > >跨windows、Linux的Gitosis運用概念全解

跨windows、Linux的Gitosis運用概念全解

git gitosis

開始用Git,但是老覺得公司的代碼放上邊不太放心,畢竟是商業性的代碼。所以就搜索網上各位博主們如何搭建私有的git服務器來實現團隊、公司內部的代碼保存、協作,發現很多文章解釋了步驟但是沒有解釋清楚原理,而且涉及到在多臺電腦之間的操作切換,安裝者基本的原理都沒有搞清楚,就不知道什麽東西該在什麽地方做對應的配置,使得安裝者不知道怎麽安裝成功、怎樣算安裝成功、安裝成功後怎麽用?基於對該問題的解決,為了避免後來者走彎路筆者遂揮毫記之,以便後來者看之、鑒之。

言歸正傳:首先Gitosis系統中的作為一個代碼、工程的同步平臺所有存在多臺電腦,每臺電腦在Gitosis系統具有不同的角色,角色分別為:Gitosis服務器、Gitosis管理客戶端、Gitosis普通客戶端,Gitosis管理客戶端也可以作為普通客戶端登入,其中:

(1)Gitosis服務器作為各git客戶端(Gitosis普通客戶端、Gitosis管理客戶端)代碼各版本代碼上傳、存儲、同步下載的服務器。

(2)Gitosis管理客戶端作為初始客戶端,Gitosis服務器根據Gitosis管理客戶端生成的公鑰進行git服務器初始化;遠程配置並以git上傳的方式在Gitosis服務器上創建團隊工程、添加普通客戶端公鑰到keydir使之具有免密訪問的前提、配置每個工程對應的每個客戶端的訪問權限(包括Gitosis管理客戶端,因為在後續的日常使用中其也可以作為Gitosis普通客戶端接入)。

(3)Gitosis普通客戶端,產生公鑰-私鑰對,並拷貝其公鑰給Gitosis管理客戶端並在Gitosis管理客戶端相應的配置具有對應項目的協作權限。

我相信,大家能看到這個網頁的已經搜索了很多網站了,其它網站只牽強的講了步驟,而沒有做出如此詳細的解釋,導致很多人即使有正確的安裝配置步驟也無法正常安裝、或者安裝正確了也無法確定是否安裝正確,因此看了上述描述之後有安裝流程的各位應該知道怎麽安裝了吧!?但即便如此,也僅僅是知其然,雖然清晰的知其然也僅僅是知其然,而為什麽Gitosis系統要如此設計?為何所以然?仍然不清楚。因此針對其設計思想以及詳細步驟我進一步的為各位做出描述:

哥當前的情況是在Ubuntu14.04安裝並設置gitosis服務器(後面簡稱“U服務器”),在win10上安裝git bash的客戶端,兩臺win10電腦一臺作為gitosis管理客戶端和Gitosis普通客戶端(後面簡稱“A管理主機”),另外一臺僅僅作為gitosis普通客戶端(後面簡稱“B普通主機”),並以在此三臺電腦間的安裝、操作來進一步準確地解釋gitosis如何安裝、怎樣算安裝好了、安裝好了怎麽使用。

服務器架設步驟:(服務器:ubuntu 14.04):

(1)<在U服務器>ubuntu系統是默認安裝有python的,但是gitosis是通過Python來安裝的,並且依賴於python-setuptools工具,因此先安裝python的該工具:

sudo apt-get install python-setuptools

(2)<在U服務器>下載並安裝gitosis

新建或者選定一個文件夾 exp: ~/src

cd ~/scr

git clone https://github.com/res0nat0r/gitosis.git (連接如果失效自己去Google)

cd gitosis

python setup.py install

(3)<在U服務器>添加用戶git

sudo adduser \

--system \

--shell /bin/sh \

--gecos ‘git version control‘ \

--group \

--disable-password \

--home /home/git \

git

(4)<在A管理主機>由於需要根據Gitosis管理客戶端生成的公鑰來初始化Gitosis服務器端(A管理主機)上的gitosis(或者說Gitosis服務器端正是因為用“A管理主機”生成的公鑰初始化才使得“A管理主機”成為“gitosis管理客戶端”),故而需要在A管理主機上生成密鑰對。

if(A管理主機.systemType == windows):

應該安裝git bash,在git bash下:

ssh-keygen -t rsa 這個windows下的git bash如何安裝就別問哥,我們說問題關鍵

一路回車產生 id_rsa(私鑰)與id_rsa.pub(公鑰)文件

else if(A管理主機.systemType == Linux)://這個其實我沒有試過,但是你們可以試一試

直接在命令行:

ssh-keygen -t rsa

一路回車產生 id_rsa(私鑰)與id_rsa.pub(公鑰)文件


拷貝id_rsa.pub文件到U服務器的/tmp/文件下 //很多情況下還是相信U盤吧!

(5)<在U服務器>初始化gitosis

sudo -H -u git gitosis-init < /tmp/id_rsa.pub

(6)<在U服務器>修改post-update權限

sudo chmod 755 /home/git/repositories/gitosis-admin.git/post-update

很多U服務器上的路徑不一定是這個,這種情況下就:find / -name post-update

相信我,相信路易斯,你可以找到!

(7)<在A管理主機>雖然在[U服務器]已經以[A管理主機]的公鑰完成gitosis初始化之後,由於需要在[A管理主機]對[U服務器]進行配置,故而需要從[U服務器]克隆gitosis-admin.git到[A管理主機],以便做進一步配置:

git clone [email protected]主機名:gitosis-admin.git //其中主機名可以為[U服務器]在局域網的IP

cd gitosis-admin.git

進入[A管理主機]gitosis-admin.git對[U服務器]的各個工程、各個工程的訪問權限進行進一步管理。

比如,在[A管理主機]上分配John的對foo項目的權限:

在gitosis-admin.git下存在gitosis.conf(文件) keydir/(目錄)

從[B主機]上拷貝[B主機]生成的公鑰(在B主機上生成公鑰的過程參考步驟<4>)到[A管理主機]上,將公鑰以[B主機]的名字命名拷貝到[A管理主機]的gitosis-admin.git/keydir/之下,其中[B主機]的名字可以參考生成公鑰末尾的主機名: [email protected]。

進一步地配置gitosis.conf,在沒有配置gitosis.conf文件的時候,該文件內容為:

[gitosis]


[group gitosis-admin]

members = [email protected]

writable = gitosis-admin

”其中group代表[A管理主機]管理的Gitosis服務器上工程的群,該group為項目管理群 gitosis-admin,管理群的成員members僅僅有哥的管理主機名:[email protected],其權限為對gitosis-admin可以進行修改,從這兒可以看出gitosis開發者的設計思想,即gitosis管理者與普通的gitosis用戶沒有根本的區別,只是具有更大的權限來修改gitosis-admin項目本身而已。

創建新的項目群後的gitosis.conf文件如下:

[gitosis]


[group gitosis-admin]

members = [email protected]

writable = gitosis-admin


[group foo]

writable = foo

members = [email protected] Jew [email protected] JewGrunhoa


新的項目名為foo,可以修改的項目為foo項目,可以訪問並修改該項目的人員(member)為:

[email protected]、[email protected]

其中[email protected]本身即為Gitosis管理主機,在此加入後亦可以作為Gitosis客戶端加入foo項目的協作。[email protected]是哥的另外一臺電腦,當然,對應的.pub公鑰文件以“JewGrunhoa.pub”的名字拷貝到gitosis-admin.git/keydir/之下。

待gitosis.conf內容修改和keydir/目錄下的公鑰添加完成後,在[A管理主機]的gitosis-admin.git下輸入命令:

git add .

git commit -am "Add foo‘s Memeber!"

git push

從而使得[A管理主機]配置的內容同步到[U服務器],從而在gitosis服務器上foo下添加了[email protected]、[email protected]兩臺主機的訪問、修改權限。


各gitosis客戶端可以訪問、修改在gitosis服務器上允許其訪問的工程,進一步的貌似只有gitosis管理客戶端可以在gitosis服務器上創建項目(其它的普通gitosis客戶端行不行還沒有試),使用[email protected](本次使用中的gitosis管理客戶端)添加項目foo,步驟如下:

mkdir foo

cd foo

git init

touch hellokitty.txt

git add .

git commit -am ‘first commit‘

git remote add origin [email protected]:foo.git

//192.168.0.108為gitosis服務器在局域內的IP地址

git push origin master

從而在gitosis服務器上創建foo項目。


進一步的,在<B主機>即gitosis普通客戶端上訪問該項目的方法為:

git clone [email protected]:foo.git

cd foo

修改foo/下的hellokitty.txt文件內容

git commit -am ‘Change hellokitty.txt‘ && git push

從而完成對foo.git中hellokitty.txt文件的修改並同步到gitosis服務器。


剩下的Google一下就非常容易搞定了


跨windows、Linux的Gitosis運用概念全解