軟件需求: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