ubuntu搭建git服务器的曲折路程

一、安装git服务器所需软件

打开终端输入以下命令:

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

 
git-core是git版本控制核心软件

安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传输文件

然后中间有个确认操作,输入Y后等待系统自动从镜像服务器中下载软件安装,安装完后会回到用户当前目录。如果

安装提示失败,可能是因为系统软件库的索引文件太旧了,先更新一下就可以了,更新命令如下:
 sudo apt-get update  
更新完软件库索引后继续执行上面的安装命令即可。
安装python的setuptools和gitosis,由于gitosis的安装需要依赖于python的一些工具,所以我们需要先安装python

的setuptools。
执行下面的命令:
 sudo apt-get install python-setuptools  
这个工具比较小,安装也比较快,接下来准备安装gitosis,安装gitosis之前需要初始化一下服务器的git用户信息,这个

随便填。

git config --global user.name "myname"   
git config --global user.email "******@gmail.com"  

初始化服务器用户信息后,就可以安装gitosis了,gitosis主要是用于给用户授权,设置权限也算是很方便的。

可以通过以下命令获取gitosis版本文件

git clone https://github.com/res0nat0r/gitosis.git  


注意:中间有两个是数字零


获取gitosis文件后,进入到文件目录下面

cd gitosis/  
接着使用python命令安装目录下的setup.py的python脚本进行安装

sudo python setup.py install  

到这里,整个安装步骤就完成了,下面就开始对git进行一些基本的配置。


二、创建git管理员账户、配置git

创建一个账户(git)作为git服务器的管理员,可以管理其他用户的项目权限。
sudo useradd -m git
sudo passwd git
(输入两次密码rg:123456)
然后再/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户没有任何权限。
sudo mkdir /home/gitrepository
sudo chown git:git /home/gitrepository/
sudo chmod 700 /home/gitrepository/  

由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在
/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目
的仓库目录/home/gitrepository。
sudo ln -s /home/gitrepository /home/git/repositories
这里我将在服务器端生成ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个ssh的公钥。
切换到git用户
su git
cd /home/git/
ssh-keygen -t rsa
这里会提示输入密码,我们不输入直接回车即可。
然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。
返回管理员账户
su root
密码
cp id_rsa.pub /tmp/
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
出现以下提示证明成功
Initialized empty Git repository in /home/gitrepository/gitosis-admin.git/
Reinitialized existing Git repository in /home/gitrepository/gitosis-admin.git/

gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里我们需要对其中的一
个post-update文件添加可执行的权限。
sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

三、服务器上创建项目仓库

使用git账户在服务器上创建一个目录(mytestproject.git)并初始化成git项目仓库。
su git
cd /home/gitrepository
mkdir mytestproject.git  
git init --bare
exit 

如果出现以下信息就说明已经成功创建了一个名为mytestproject.git的项目仓库了,新建的这个仓库暂时还是空
的,不能被客户端clone,还需要对gitosis进行一些配置操作。
Initialized empty Git repository in /home/gitrepository/

四、使用gitosis管理用户操作项目的权限

首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。
在客户端机器上新建一个目录用于存放gitosis-admin.git仓库
mkdir gitadmin
cd gitadmin/
git clone git@localhost:gitosis-admin.git
clone正确会显示以下信息
。。。
clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,
keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用
于认证请求的客户端机器。
现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名
命名好,复制到keydir目录下。


客户机
ssh-keygen -t rsa
这里会提示输入密码,我们不输入直接回车即可。生成客户机密匙rg:PC201612061631.pub

权限编辑
继续编辑gitosis.conf文件

[gitosis]

[group gitosis-admin] ####管理员组
members = git@localhost####管理员用户名,需要在keydir目录下找到相应的.pub文件,多个可用空格隔开(下同)
writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)


[group testwrite] ####可写权限组
members = PC201612061631####组用户
writable = mytestproject####可写的项目仓库名

[group testread]####只读权限组
members =lisi####组用户
#readonly= mytestproject####只读项目仓库名

这些配置的修改只是在本地修改的(即管理员机器和GIT服务器不在一台机器),还需要推送到服务器中才能生效。
git add .  
git commit -am "add a user permission"
git push origin master 

有时候新增的用户不能立即生效,这时候需要重新启动一下sshd服务
sudo /etc/init.d/ssh restart 

现在,服务端的git就已经安装和配置完成了,接下来就需要有权限的组成员在各自的机器上clone服务器上的相应

项目仓库进行相应的工作了。

五、客户端用户(windows)使用git
下载安装windows版本的git客户端软件,下载地址:http://msysgit.github.io/(国内下载太慢可以使用软件管家之类的下载)
安装完成后右键菜单会出现几个git相关的菜单选项,我们主要使用其中的git bash通过命令行来进行操作。

在本地新建一个目录,使用git初始化这个目录,然后再里面新建一个文本文件用于测试,最后关联到git服务器仓库
中的相关项目,最后上传本地版本到服务器。

 mkdir testgit  
 cd testgit  
 git init  
 echo "this is a test text file,will push to server" > hello.txt  
 git add .  
 git commit -am "init a base version,add a first file for push to server"  
 git remote add origin git@serverip:mytestproject.git  (权限管理里需要添加该仓库权限)
 git push origin master  
 
 这样服务端就创建好了一个mytestproject.git的仓库的基础版本了,现在其他组员只要从服务端进行clone就可以

了。

window下面进入到需要克隆的本地目录下面右键选择git bash选项,输入

git clone git@serverip:mytestproject.git
就可以把项目clone到本地仓库了。

下面进行简单的修改和提交操作
 cd mytestproject  
 echo "this is another text file created by other" >another.txt  
 git add .  
 git commit -am "add a another file by other"  
 git push origin master  
 最后推送到服务器成功会显示如下信息
 

你可能感兴趣的:(ubuntu搭建git服务器的曲折路程)