当前位置:主页 > 路由器知识 >

ubuntu搭建git服务器的方法

作者: 发布时间:2016-02-26 阅读: 转至微博:

 事先强调几个必备工具的用途:

 

 

git-core    git工具的主程序
openssh-server openssh-client    ssh工具的主程序,一个是服务端,一个是客户端
python-setuptools    以后安装gitosis要用到的工具
 
我的系统为ubuntu 12.04.5 server amd64
在搭建git服务器之前先请确认ubuntu系统已经安装成功,由于本文着重强调git服务器的安装就不阐述ubuntu 系统的安装过程,以及git命令的基本语法.以下所以有的命令都是在终端输入窗口输入.(这个其实不用我强调的,对吧.哇咔咔)
目前ubuntu的服务器的全名为ubuntu,用户名:antier
更新软件
antier@ubuntu:~$sudo apt-get update
安装git,ssh协议
antier@ubuntu:~$sudo apt-get install git-core openssh-server openssh-client
注:git-core是git版本控制核心软件,安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件,安装的过程中有确认操作,输入Y后等待系统自动从镜像服务器中下载软件安装,安装完后会回到用户当前目录
安装python的setuptools和gitosis,由于gitosis的安装需要依赖于python的一些工具,所以这里需要先安装python的setuptools,
antier@ubuntu:~$sudo apt-get install python-setuptools
由于gitosis的安装需要用到git,所以在获取gitosis包时需要先初始化一个服务器的git用户信息
antier@ubuntu:~$git config --global user.name "YourName"
antier@ubuntu:~$git config --global user.email "Email@example.com"
初始化服务器的用户信息后,就可以安装gitosis了.gitosis是用于管理git并给用户授权的工具,设置权限算是很方便的啦.这里我们将gitosis下载到/tmp目录下
antier@ubuntu:~$git clone https//github.com/res0nat0r/gitosis.git
获取gitosis文件后.在/tmp目录下就会多出一个文件目录,名为gitosis
antier@ubuntu:~$cd /tmp/gitosis/
antier@ubuntu:/tmp/gitosis$sudo python setup.py install
创建git管理帐户,配置git.这个是一定要做的.这个直接会影响到后期clone
antier@ubuntu:~$sudo useradd -m git
antier@ubuntu:~$sudo passwd git
然后在/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户没有任何权限
antier@ubuntu:~$sudo mkdir /home/gitrepository
antier@ubuntu:~$sudo chown git:git /home/gitrepository
antier@ubuntu:~$sudo chmod 700 /home/gitrepository
由于gitosis初始化时会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。
antier@ubuntu:~$sudo ln -s /home/gitrepository /home/git/repositories
初始化gitosis
由于初始化gitosis时需要用户的ssh公钥,所以这里将在服务器端生成git用户的ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个ssh公钥
antier@ubuntu:~$su git        (注:以下的命令符前只有$时,说明当前是用git用户登陆并执行命令操作)
$ssh-keygen -t rsa
这里会提示输入密码,我们不输入直接回车即可,git用户的ssh公钥将生成在/home/git/.ssh/id_rsa.pub,为了方便管理,我们将公钥拷贝到服务器的/tmp下
$cp /home/git/.ssh/id_rsa.pub /tmp
为了方便管理公钥我们这里将公钥的名字改一下
$mv /tmp/id_rsa.pub /tmp/git.pub
如果是其他机器上的ssh公钥可以通过以下方式将公钥拷贝至服务器的/tmp目录
$scp /home/$username/.ssh/id_rsa.pub git@<server-ip>:/tmp
antier@ubuntu:~$sudo chmod a+r /tmp/git.pub
antier@ubuntu:/tmp/gitosis$sudo -H -u git gitosis-init < /tmp/git.pub
 
gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一个post-update文件添加可执行的权限。
ubuntu:/home/git$ sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update
注:这一段我有看到网上这么处理一下,但我发现,如我之前这样操作后post-update本身的权限就已经是755啦.所以这里只是标注一下.
服务器上创建项目仓库
使用git帐户在服务器上创建一个目录(mytestproject.git)并初始化成git项目仓库
antier@ubuntu:~$su git
$cd /home/gitrepository
进入这个目录可以发现该目录里存在一个gitosis-admin.git目录,这个明白是哪里来的嘛,还记得之后做过ln -s xxxx的操作嘛,哇咔咔,是不是秒懂啦.
$mkdir mytestproject.git
$cd mytestproject.git
$git init -- bare
$exit
注:执行完init的操作,正常情况下会提示创建了一个暂时为空的仓库,好啦,现在新建的仓库已经创建好了,但目前还不能被客户端clone,还需要对gitosis进行一些配置操作
使用gitosis管理用户操作项目的权限
由于gitosis的管理是通过git的clone,然后修改并提交进行管理的,还记得gitosis在服务上安装并初始化嘛?还记得当时gitosis是怎么初始化的嘛?没错,就是用git用户去初始化的,我现在在这里给你申明一下,等下告诉你为什么我要申明哦.哇咔咔...在客户端机器上新建一个目录用于存放gitosis-admin.git仓库,这里由于我想用antier用户进行管理mytestproject.git所以执行以下操作,如果你在客户端机器上,也可以执行类似的操作哦
antier@ubuntu:~$mkdir workspace
antier@ubuntu:~$cd workspace
antier@ubuntu:~/workspace$mkdir gitadmin
antier@ubuntu:~/workspace$cd gitadmin
antier@ubuntu:~/workspace/gitadmin$git clone git@<service-ip>:/home/git/repositories/gitosis-admin.git
注:这下明白我之前申明的用意了嘛!是不是秒懂clone后面地址为什么是这样子了嘛,哇咔咔...
clone下来有一个gitosis-admin目录,可以看到gitosis-admin目录里有一个配置文件gitosis.conf与一个目录keydir.
gitosis.conf用于配置用户的权限信息,keydir主要用户存放ssh公钥文件(一般以"用户名@机器名.pub"命名,gitosis.conf配置文件中必须使用相同用户名),用于认证请求的客户机器
antier@ubuntu:~/workspace/gitadmin/keydir$ssh-keygen -t rsa
antier@ubuntu:~/workspace/gitadmin/keydir$cp /home/antier/.ssh/id_rsa.pub ./
antier@ubuntu:~/workspace/gitadmin/keydir$mv id_rsa.pub antier@ubuntu.pub
antier@ubuntu:~/workspace/gitadmin/keydir$cd ../
antier@ubuntu:~/workspace/gitadmin/keydir$vim gitosis.conf
编辑gitosis.conf文档,在文档最后添加以下内容
[group mytestproject]
members = git@ubuntu antier@ubuntu
writable = mytestproject
这样修改已经完成了,而这些修改只是在本地哦,还需要推送到服务器中才能生效,可别忘记啦.
antier@ubuntu:~/workspace/gitadmin$git add .
antier@ubuntu:~/workspace/gitadmin$git commit -m "add a user antier@ubuntu permission"
antier@ubuntu:~/workspace/gitadmin$git push origin master
现在服务器中的mytestporjetc仓库就算是搭建好了.接下来有对应权限的成员就可以各自从服务器上clone对应仓库并进行相关操作啦.
测试 http://www.luyouqiwang.com/
antier@ubuntu:~/workspace$git clone git@<server-ip>:mytestproject.git mytestproject
这时可以看到在workspace目录下就多出一个mytestproject空目录,其实它并不是一个空目录,你可以使用ll命令查看,目录下对应有一个.git目录.哇咔咔...这个空目录就是当初我们在服务上的新仓库/home/git/repositories/mytestproject.git,为了进一步验证,我们在本地添加一个文件
antier@ubuntu:~/workspace/mytestproject$touch test.txt
antier@ubuntu:~/workspace/mytestproject$git add .
antier@ubuntu:~/workspace/mytestproject$git commit -m "add test.txt for test"
antier@ubuntu:~/workspace/mytestproject$git push origin master
antier@ubuntu:~/workspace$git clone git@<server-ip>:mytestproject.git mytestproject_2
这下我们去看mytestproject_2的目录,有发现什么,是不是相对之前取的mytestproject多了一个test.txt文档.或者我们查看一下git log信息,是不是有一条信息为"add test.txt for test"
完结,到此算是说完了.感觉好啰嗦啊!!哇咔咔...文章中有些文字排版有采纳了部分网络博文的描述方式,每个操作我都是经过自己测试过,才敢负责任的阐述出来,如果还有什么不明白的,请参数我的另外一篇博文"说在前面的话"

本文由路由器网www.luyouqiwang.net站长编辑整理,转载请注明出处。