
1 配置环境
操作系统:Ubuntu10.10
内核:2.6.35标准版
服务器端管理员用户名:administrator
服务器端ip:192.168.10.147
管理员客户端用户名:user01
管理员客户端ip:192.168.10.157
普通用户客户端用户名:user02
2 服务器配置
2.1 软件准备
1)安装Gitosis和Git。
administrator@server:~$ sudo apt-get install git-core gitosis
2)安装ssh。
administrator@server:~$ sudo apt-get install openssh-server openssh-client
3)添加git用户并设置密码。服务器端的git用户将作为代码仓库的所有者和用户权限的管理者。
administrator@server:~$ sudo useradd –m git
administrator@server:~$ sudo passwd git
4)初始化服务器上的git用户。(为安装gitosis做准备,客户端的用户在使用git的时候也要如此初始化)
administrator@server:~$ git config –global user.name “wuchao”
administrator@server:~$ git config –global user.email “aaawuchao@gmail.com”
5)安装gitosis还需要安装python的setup tool。
administrator@server:~$ sudo apt-get install python-setuptools
6)获得gitosis包并安装。
administrator@server:~$ cd /tmp
administrator@server:/tmp$ git clone git://eagain.net/gitosis.git
administrator@server:/tmp$ cd gitosis
administrator@server:/tmp/gitosis$ sudo python setuo.py install
实验室的代理无法连接git://eagain.net/gitosis.git,因此无法下载。我是在网上搜的sitosis安装包,直接放到/tmp/gitosis/下安装的。
2.2 管理员客户端ssh密钥生成和上传
服务器端的gitosis要用代码仓库管理员(user01)客户端的公钥来初始化,方便日后管理。
1)在管理员客户端电脑的ubuntu系统上:
user01@client:$ ssh-keygen –t rsa
此举会在/home/user01/.ssh/下生成私钥id_rsa和公钥id_rsa.pub文件。
2)将刚才生成的id_rsa.pub公钥传输到服务器端的电脑,并保证其它用户有读的权限:
user01@client:$ scp .ssh/id_rsa.pub git@192.168.10.147:/tmp
也可以直接用U盘拷贝过去。
2.3 gitosis初始化
1)确保刚才上传到服务器端的管理员公钥有读权限:
administrator@server:~$ sudo chmod a+r /tmp/id_rsa.pub
2)初始化运行gitosis:
administrator@server:~$ sudo –H –u git gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
初始化后,在/home/git/repositories/下生成gitosis-admin.git/目录,其实也就是gitosis配置文件所在的以git仓库形式存在的目录。
还需要修改一个文件的权限才可以在管理员客户端更新配置文件:
administrator@server:~$ sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
exit
3 服务器常用操作
3.1 创建新仓库
在服务器端,添加一个叫test的空仓库:
administrator@server:~$ su git
$ mkdir /home/git/repositories/test.git
$ cd /home/git/repositories/test.git
$ git init --bare
$ exit
每次创建一个新仓库,都必须这样操作。
3.2 添加和修改用户权限
1)clone仓库配置文件夹gitosis-admin:
user01@client:~$ mkdir work
user01@client:~$ cd work
user01@client:~/work$ git clone git@192.168.10.147:gitosis-admin.git
user01@client:~/work$ cd gitosis-admin
2)添加普通用户user02公钥和仓库权限
a)将user02的公钥文件id_rsa.pub拷贝到gitosis-admin/keydir/下并改名为user02.pub。
b)修改gitosis.conf配置文件,添加user02对仓库的权限。
user01@client:~/work/gitosis-admin$ vim gitosis.conf
对gitosis.conf进行如下修改:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = user01
[group test]
writable = test
members = user02
[group hello_ro]
readonly = test
members = user01
配置文件表明:对于管理员仓库gitosis-admin,user01有读写权限;对于普通仓库test,user02有读写权限,user01只有读的权限。
同时,members后面的用户名需要与gitosis-admin/keydir/里的公钥名字一致(不包含后缀名.pub)。
gitosis-admin配置仓库修改完之后,还需要push到服务器才能生效:
user01@client:~/work/gitosis-admin$ git add .
user01@client:~/work/gitosis-admin$ git commit –am “add user02 to test”
user01@client:~/work/gitosis-admin$ git push
3.3 仓库初始化
1)空仓库是无法clone的,需要上传一个初始化版本。(假设由user02用户执行,他已经有权限)。
user02@client:~$ mkdir test
user02@client:~$ cd test
user02@client:~/test$ git init
user02@client:~/test$ touch hello.c
user02@client:~/test$ git add .
user02@client:~/test$ git commit –am “test 1st version”
user02@client:~/test$ git remote add origin git@192.168.10.147:test.git
user02@client:~/test$ git push origin master
2)push成功后,test仓库就有第一个版本了,可以进行进一步修改:
user02@client:~/test$ echo “#include user02@client:~/test$ git add . user02@client:~/test$ git commit –am “user02 modified 2012.05.13 10:45” user02@client:~/test$ git push 4 Eclipse的Egit配置 4.1 安装Egit插件 可以通过Eclipse的Help->Install New Software或者Help->Eclipse Markeplace安装。 4.2 生成ssh密钥 Windows->Preferences->General->Network Connections->SSH2 图 4.1 Save Private Key之后,Windows用户会在c:\Documents and Settings\用户名\\.ssh生成密钥对,ubuntu用户则是/home/用户名/.ssh/。 最好把密钥对的文件名改成用户名,方便管理。例如,对于user01用户将私钥id_rsa改成user01,公钥id_rsa.pub改成user01.pub。然后将user01.pub交给管理员push到服务器上,并配置gitosis.conf。 接着需要在eclipse添加私钥: 图 4.2 如果在.ssh下面没有known_hosts文件,则需要先用eclipse执行一次clone操作,创建known_hosts文件后,才能push,不然push的时候会报连接错误。完成后,就可以正常使用git代码服务器了。 4.3 其它配置 1)首先要配置使用版本库的人名字和邮箱,这相当于命令行中的 git config –global user.name “your name” git config –global user.email you@example.com 打开Preferences > Team > Git > Configuration,点击 New Entry ,新建一个键值对,user.name和user.email。 图 4.3 图 4.4 建好后,可以查看到刚刚新建成功后的用户信息。 图 4.5 2)建立Home目录 类似建立系统变量,打开新建系统变量的窗口,新建一个HOME,变量值输入"%USERPROFILE%"或者其他一个路径,如下图所示: 图 4.6 5 Eclipse下的git操作 5.1 将本地project创建成git仓库并初始化到git服务器 1)创建一个本地工程,名字叫HelloGit。 图 5.1 2)选择这个工程,点击右键,Team->Share Project,选择git。 图 5.2 如上图所示,选择工程,然后选择Use or create…,进入选择Create Repository对这个工程初始化一个git版本库,如图5.3。如果这个工程已经在于一个版本库的工作树上的话,这个版本库会自动选择,如图5.4: 、 图 5.3 图 5.4 3)点击Finish完成创建。 图 5.5 4)对工程点击右键,选择team,会出来git的命令,选择commit,然后选择你要提交的文件,加上提交留言,点击commit,完成提交。 图 5.6 5)然后对工程点击右键->team会出来git菜单: 图 5.7 6)选择remote->push进入push窗口,然后在URI输入git仓库的路径后,点击Next。这里的git仓库android-security.git必须是在服务器端初始化过的仓库。 图 5.8 7)接下来出现新的push操作界面(图 5.9),如图在Source ref选择要push到的分支,再点击Add Spec,接着点击finish即完成将本地project上传到git服务器的操作。 图 5.9 5.2clone一个服务器端的仓库到本地 1)import一个git项目,选择URI方式。 图 5.10 2)然后在URI栏输入服务器现有git仓库路径,然后按Next: 图 5.11 3)然后选择用于存放项目的路径: 图 5.12 4)接下来的界面选择Import existing projects将刚才clone的仓库直接导入成eclipse项目,如图5.13所示: 图 5.13 5)如果完成代码的修改后,要更新该项目的服务器端版本,则先team->commit,然后右键点击项目名,选择team->Push to Upstream即可,如图5.14所示: 图 5.14
