使用Gitosis搭建Git服務器

軟件需求:Git-core,gitosis, openssh-server, git-daemon-run(ubuntu)弄喘,msysgit(windows)

Step1. 安裝配置Git服務器(IP:192.168.1.101)

? ? ? ? 安裝Git和openssh。

$ sudo apt-get install git-core openssh-server

新建用戶git臣樱,該用戶作為所有代碼倉庫和用戶權限的管理者。

$ sudo groupadd git

? ? ? ? $ sudo useradd git –g git –m

$ sudo passwd git (需要設置用戶git的密碼)

Step2. 安裝gitosis

? ? ? ? 初始化服務器的全局設置沦零,為安裝gitosis做準備盼砍。在任何一臺機器上使用git,第一次必須要先設置user.name和user.email豆胸。

$ git config --global user.name “david”

$ git config --global user.email “david@server-pc”(name和email隨意)

安裝一下Python的setup tool。

$ sudo apt-get install python-setuptools

獲取gitosis包巷疼。?

$ git clone https://github.com/res0nat0r/gitosis.git(或者到網(wǎng)上下載對應的gitosis)

$ cd gitosis

$ sudo python setup.py install

Step3. 配置gitosis

? ? ? ? 在git管理員的PC上晚胡,先安裝msysgit(windows系統(tǒng)),安裝后嚼沿,打開gitbash估盘,運行如下命令生成管理員密鑰:

$ ssh-keygen –t rsa

運行以上命令后,可以默認提示直接回車骡尽∏餐祝回車后在當前用戶目錄下生成了.ssh/id_rsa和.ssh/id_rsa.pub。其中.ssh/id_rsa是私玥攀细,.ssh/id_rsa.pub是公鑰箫踩。接下來可以使用如下命令將git管理員的公鑰上傳到git服務器,也可以直接拷貝到git服務器谭贪。

$ scp xxx/.ssh/id_rsa.pub webgod@192.168.1.101:/tmp/id_rsa.pub

回到Git服務器上境钟。

$ sudo chmod a+r /tmp/id_rsa.pub

讓gitosis運行起來:

$ sudo –H –u git gitosis-init

Initialized empty Git repository in /home/repo/gitosis-admin.git/

? Reinitialized existing Git repository in /home/repo/gitosis-admin.git/

Gitosis是通過一個git倉庫來管理配置文件,倉庫放在/home/git/repositories/gitosis-admin.git俭识。

? ? ? ? 設置git倉庫權限

$ sudo chown git:git /home/git/repositories

$ sudo chmod 755 /home/git/repositories

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

Step4. 在服務器上新建測試項目倉庫

在服務器上新建一個空的項目倉庫可慨削,叫“test”。

切換到git用戶:

$ su – git

$ cd repositories

$ git init --bare test.git

$ exit

到這里,test只是一個空倉庫缚态,它是不能clone下來的磁椒。為了能做clone,必須先讓管理員或有權限的人放一個初始化的版本到倉庫中玫芦。所以浆熔,我們必須先修改一個gitosis-admin。

Step5. 管理gitosis的配置文件

Gitosis本身的配置也是通過git來實現(xiàn)的桥帆。在剛剛上傳公鑰(服務器端gitosis-init時使用了該公鑰)的機器上蘸拔,把gitosis-admin.git這個倉庫clone下來,就可以以管理員的身份修改配置了环葵。

新建一個文件夾,如git101:

$ mkdir git101

$ cd git101

$ git clone git@192.168.1.101:gitosis-admin.git(或使用全路徑)

注:訪問git用戶倉庫的默認路徑是/home/git/repositories/

$ cd gitosis-admin

該目錄下的keydir目錄是用來存放所有需要訪問git服務器的用戶的ssh公鑰宝冕。各個用戶按照前面提到的辦法生成各自的ssh公鑰文件后张遭,把所有人的ssh公鑰文件按名字重新命名一下,然后拷貝到keydir目錄下地梨,然后修改gitosis.conf文件菊卷,做相應的配置:

[gitosis]

? ? ? ? [group gitosis-admin]

? ? ? ? writable = gitosis-admin

? ? ? ? members = david@DAVID-PC? tom@TOM-PC

? ? ? ? [group team]

? ? ? ? writable = test

? ? ? ? members = david@DAVID-PC? tom@TOM-PC? pitter@PITTER-PC

這個配置文件表達了如下含有:gitosis-admin組成員有david,tom宝剖,該組對gitosis-admin倉庫有讀寫權限洁闰;test組有david,tom万细,pitter三個成員扑眉,該組對test倉庫有讀寫權限。目前這些配置文件的修改只是在本地赖钞,必須推送到遠程的git服務器上才能真正生效腰素。

加入新文件、提交并push到Git服務器:

$ git add .

$ git commit –m “add test and someusers”

$ git push origin master

Step6. 初始化測試項目

現(xiàn)在服務器搭建完畢雪营,并且有一個空的項目test在服務器上弓千。接下來,需要測試一下献起,空倉庫是不能clone的洋访,所以需要某個有寫權限的人初始化一個版本。在客戶端執(zhí)行:

$ mkdir test-ori

$ cd test-ori

$ git init (在客戶端執(zhí)行谴餐,初始化一個本地的版本庫)

$ echo “/* add something */” > hello.c

$ git add .

$ git commit –m “initial version”

$ git remote add origin git@192.168.1.101:test.git

$ git push origin master

到此為止姻政,test已經(jīng)有了一個版本了,team的其他成員只要先clone一下test倉庫就可以了总寒,而且gitosis.conf中賦予的讀寫權限扶歪。

Step7. 添加已有git項目

如果想將一個現(xiàn)成的git倉庫,放到Git服務器上供team使用(比如clone了一個官方的kernel倉庫,想在內(nèi)部使用它作為基礎倉庫)善镰,可以這樣操作:

首先需要從你的工作倉庫中得到一個純倉庫妹萨,比如你的工作目錄為~/kernel,你想將該純倉庫拷貝到Git服務器上使用炫欺。Git服務器的管理員拿到這個純倉庫(~/kernel)后乎完,將其拷貝到/home/repo/下,同時配置gitosis相關配置文件品洛。比如說:下載ALSA庫树姨。

$ git clone git://Android.git.kernel.org/platform/external/alsa-lib.git

$ git clone git://android.git.kernel.org/platform/external/alsa-utils.git

生成bare庫:

$ git clone --bare alsa-lib alsa-lib.git

$ git clone --bare alsa-utils alsa-utils.git

將bare庫移動到Git服務器目錄:

$ cp alsa-lib.git /home/repo

注意變更所有者,以獲取提交權限桥状。

$ chown -R git alsa-lib.git

Step8. 安裝git-daemon

如果想使用git協(xié)議帽揪,那么就需要安裝git-daemon,它是git的一個守護進程(作為一個服務存在)辅斟。

$ sudo apt-get install git-daemon-run

編輯git-daemon配置文件:

$ sudo gedit /etc/sv/git-daemon/run

#!/bin/bash

? ? ? ? exec2>&1

? ? ? ? echo‘git-daemon starting.’

? ? ? ? execchpst -ugitdaemon

“$(git--exec-path)”/git-daemon --verbose --export-all--enable=receive-pack --enable=upload-pack --enable=upload-archive --reuseaddr --base-path=/home/webgod/

說明:

? ? ? ? --base-path? ? ? 指向Git服務器的根目錄

? ? ? ? --enable=receive-pack

? ? ? ? --enable=upload-pack

? ? ? ? --enable=upload-archive

以上三個是與git-clone转晰,git-push,git-pull相關的士飒。查看詳情使用命令:$ man git-daemon查看查邢。

重啟git服務器:

$ sudo sv restart git-daemon

在Git服務器上:

$ cd /home/webgod

$ mkdir RepoServer

$ cd RepoServer

$ git init --bare manifest.git

切換到其他目錄:

$ cd ~/test

$ git clone git://127.0.0.1/RepoServer/manifest.git

($ git clone git@127.0.0.1:/home/webgod/RepoServer/manifest.git)

這里就實現(xiàn)了所謂的“匿名訪問”。

[說明]:

1.如果其它新加入的成員無法clone一個git倉庫時酵幕,如出現(xiàn)如下錯誤提示:

ERROR: gitosis.serve.main:Repositoryread access denied

原因是當前成員的key命名與在gitosis.conf中的members中的名字不一致扰藕!例如所用的key名是 lxq_rsa.pub,而在gitosis.conf中某一group下所用的名稱為 lxq@ubuntu

則只需要把lxq_rsa.pub重命名為lxq@ubuntu.pub并重新push到服務器上即可芳撒!

2. 在克隆倉庫時如果出現(xiàn)如下錯誤提示:

fatal: ‘~/gitosis-admin.git’ does not appear to be a gitrepositories

fatal: The remote end hung up unexpectedly

試用 $ git clone git@192.168.1.101:/home/git/repositories/gitosis-admin.git

3.使用公鑰認證的方式登錄邓深。具體操作過程如下:

1) 在服務器端(server)創(chuàng)建一個賬號(公共),例如anonymous番官;

2) 管理員收集需要訪問git服務的用戶公鑰庐完,如user1.pub、user2.pub徘熔;

3) 使用ssh-copy-id命令將各個git用戶的公鑰遠程加入服務器(server)的公鑰認證列表门躯。

遠程操作,可以使用ssh-copy-id命令:

? $ ssh-copy-id -I user1.pub anonymous@server

? $ ssh-copy-id -I user2.pub anonymous@server

如果直接在服務區(qū)上操作酷师,則直接將文件追加到authorized_keys文件中:

? $ cat /path/to/user1.pub>> ~anonymous/.ssh/authorized_keys

? $ cat/path/to/user2.pub >> ~anonymous/.ssh/authorized_keys

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讶凉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子山孔,更是在濱河造成了極大的恐慌懂讯,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件台颠,死亡現(xiàn)場離奇詭異褐望,居然都是意外死亡勒庄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門瘫里,熙熙樓的掌柜王于貴愁眉苦臉地迎上來实蔽,“玉大人,你說我怎么就攤上這事谨读【肿埃” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵劳殖,是天一觀的道長铐尚。 經(jīng)常有香客問我,道長哆姻,這世上最難降的妖魔是什么宣增? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮矛缨,結果婚禮上统舀,老公的妹妹穿的比我還像新娘。我一直安慰自己劳景,他們只是感情好,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布碉就。 她就那樣靜靜地躺著盟广,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓮钥。 梳的紋絲不亂的頭發(fā)上筋量,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音碉熄,去河邊找鬼桨武。 笑死,一個胖子當著我的面吹牛锈津,可吹牛的內(nèi)容都是我干的呀酸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼琼梆,長吁一口氣:“原來是場噩夢啊……” “哼性誉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起茎杂,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤错览,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后煌往,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倾哺,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了羞海。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忌愚。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖扣猫,靈堂內(nèi)的尸體忽然破棺而出菜循,到底是詐尸還是另有隱情,我是刑警寧澤申尤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布癌幕,位于F島的核電站,受9級特大地震影響昧穿,放射性物質(zhì)發(fā)生泄漏勺远。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一时鸵、第九天 我趴在偏房一處隱蔽的房頂上張望胶逢。 院中可真熱鬧,春花似錦饰潜、人聲如沸初坠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碟刺。三九已至,卻和暖如春薯酝,著一層夾襖步出監(jiān)牢的瞬間半沽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工吴菠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留者填,地道東北人。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓做葵,卻偏偏與公主長得像占哟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子酿矢,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359