跨windows、Linux的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 \

        --disabled-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 git@主機名: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主機]的名字可以參考生成公鑰末尾的主機名:  xxxx@xxxx。

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

    “

    [gitosis]


    [group gitosis-admin]

    members = JewGrunhia@DESKTOP-OAR2S8U

    writable = gitosis-admin

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

    創建新的項目羣后的gitosis.conf文件如下:

    “

    [gitosis]


    [group gitosis-admin]

    members = JewGrunhia@DESKTOP-OAR2S8U

    writable = gitosis-admin


    [group foo]

    writable = foo

    members = JewGrunhia@DESKTOP-OAR2S8U Jew Jewgrunhoa@DESKTOP-782FAJJ JewGrunhoa

    ”

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

    JewGrunhia@DESKTOP-OAR2S8U、Jewgrunhoa@DESKTOP-782FAJJ

    其中JewGrunhia@DESKTOP-OAR2S8U本身即爲Gitosis管理主機,在此加入後亦可以作爲Gitosis客戶端加入foo項目的協作。Jewgrunhoa@DESKTOP-782FAJJ是哥的另外一臺電腦,當然,對應的.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下添加了JewGrunhia@DESKTOP-OAR2S8U、Jewgrunhoa@DESKTOP-782FAJJ兩臺主機的訪問、修改權限。


    各gitosis客戶端可以訪問、修改在gitosis服務器上允許其訪問的工程,進一步的貌似只有gitosis管理客戶端可以在gitosis服務器上創建項目(其它的普通gitosis客戶端行不行還沒有試),使用JewGrunhia@DESKTOP-OAR2S8U(本次使用中的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一下就非常容易搞定了

    補充:

    有些操作不寫真的很容易忘記,爲了方便自己回來查看,我來補充一些從gitosis同步最新文件的方式,我常用的方法如下:

    <在git普通客戶端、或者可以作爲普通客戶端的git管理客戶端、git服務器>

    git fetch origin master:temp

    git diff temp    //比較master分支和temp分支的不同

    git merge temp    //合併temp分支到master分支

    git branch -d temp    //刪除temp

    

    (⊙o⊙)…,這就可以了,然後你沒看錯git服務器如果向git管理主機提自己產生的公鑰也可以像git普通客戶端那樣具有項目訪問、修改、提交的權限,但是這樣就與gitosis開發者的意圖南轅北轍了,爲啥?人家這樣搞爲的就是你把gitosis服務器架設在阿里雲之類的第三方服務器上,服務器上存儲都是加密後的代碼,託管平臺方根本無法獲取你的數據,這保證了開發者的IP安全還可以隨時隨地的git同步的自己的代碼庫。我呢,因爲服務器是我自己的,所以沒關係啦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章