刚入职一个月左右,昨晚公司给培训了SVN和Git的使用。之前在研究生期间,和导师做项目就一直使用git做版本管理。想起研究生有一段时间,git总出错(秘钥都不好使了,只有某个机器生成的rsa key 可以使用),我和亮哥、杨老师调了一下午,想起这段经历,加上昨晚培训的内容,让我有种想搭建Git服务器的冲动。于是。趁着今天周五,晚上有空,说干就干。

环境准备:虚拟机:VMware WorkStation 12 Player.(免费,自行下载). 镜像文件:Ubuntu16

环境准备好之后,那就开始吧。

reference:http://www.linuxidc.com/Linux/2015-07/120616.htm

Ubuntu16 搭建Git 服务器

一.在Ubuntu上安装Git服务器所需软件

1.安装git-core, openssh-server, openssh-client三个软件。git-core是git的核心软件; openssh-server、openssh-client是服务器和客户端传输文件通过ssh协议。

安装命令:”sudo apt-get install git-core openssh-server openssh-client”。

注意:如果此步骤安装失败,可能是软件库过旧,使用“sudo apt-get update”命令,更新软件库。

2. 安装python-setuptools软件。该软件是用来安装gitosis的。

安装命令:”sudo apt-get install python-setuptools”。

3.安装gitosis。Gitosis主要用于管理用户对仓库的操作权限。

Pre:安装gitosis之前,需要初始化git服务器用户信息。

输入命令:“git config --global user.name ”charlie””;

“git config --global user.email ”995940119@qq.com””。

Next: 获取gitosis版本文件

输入命令:“git clone https://github.com/res0nat0r/gitosis.git”

Final: 安装gitosis.

进入gitosis目录,使用python命令安装目录下的setup.py的python脚本进行安装。输入命令:“sudo python setup.py install”。

到这里,服务器上git所需软件都已安装完毕。

二.配置Git服务器

1.创建git管理员账户

增加用户命令:sudo useradd  -m  git

修改git用户密码:sudo passwd git 输入密码(123)

2. 创建项目仓库存储点

在/home/目录下创建一个目文件夹作为仓库sudo mkdir /home/gitrepository,

修改用户组和权限

由于gitosis默认状态下会将仓库放在用户的repositories目录下,例如git用户的仓库地址默认在/home/git/repositories/目录下,这里我们需要创建一个链接映射。让他指向我们前面创建的专门用于存放项目的仓库目录/home/gitrepository。

3. 初始化gitosis

First: 在服务端生成SSH公钥,输入命令:“ssh-keygen -t rsa”,这里会提示输入密码,我们不输入直接回车即可。

Next: 用刚生成公钥id_rsa.pub来对gitosis进行初始化。输入命令:“sudo -H -u git gitosis-init <  /root/.ssh/id_rsa.pub”。

出现如上信息说明gitosis已经初始化成功。

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

ubuntu:/home/git$ sudo chmod 755 /home/gitrepository/gitosis-admin.git/hooks/post-update

三.服务器中创建项目仓库

使用git账户在服务器上创建一个目录(mytestproject.git)并初始化成git项目仓库。

ubuntu:/home/git$ su git
$ cd /home/gitrepository
$ mkdir mytestproject.git

$ cd mytestproject.git/
$ git init --bare
$ exit

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

1. 首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库clone下来。

在客户端机器上新建一个目录用于存放gitosis-admin.git仓库

ubuntu:~$ mkdir gitadmin
ubuntu:~$ cd gitadmin/
ubuntu:~/gitadmin$ git clone git@localhost:gitosis-admin.git

clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用户的权限信息,keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需使用相同用户名),用于认证请求的客户端机器。

现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理员把他们分别按用户名命名好,复制到keydir目录下。

继续编辑gitosis.conf文件

[gitosis]

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

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

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

因为这些配置的修改只是在本地修改的,还需要推送到服务器中才能生效。

ubuntu:~/gitadmin/gitosis-admin$ git add .
ubuntu:~/gitadmin/gitosis-admin$ git commit -am "add a user permission"
ubuntu:~/gitadmin/gitosis-admin$ git push origin master

重新启动一下sshd服务

ubuntu:~/gitadmin/gitosis-admin$ sudo /etc/init.d/ssh restart

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

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

五.客户端使用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

六、错误列表

1. “remote: error: insufficient permission for adding an object to repository database ./objects ”

解决方案:查看原mytestproject.git目录权限,发现mytestproject.git/object/没有group写权限导致;执行 $ sudo chmod g+w -R mytestproject.git/object 后OK

Ubuntu16 搭建Git 服务器的更多相关文章

  1. 搭建Git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  2. Git学习笔记(10)——搭建Git服务器

    本文主要记录了Git服务器的搭建,以及一些其他的配置,和最后的小总结. Git远程仓库服务器 其实远程仓库和本地仓库没啥不同,远程仓库只是每天24小时开机为大家服务,所以叫做服务器.我们完全可以把自己 ...

  3. centos 搭建git服务器

    centos 6搭建git服务器 安装 rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-6.noarch.rpm yum ins ...

  4. 如何在服务器上搭建git服务器

    参考文章: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770 ...

  5. 使用Gitosis搭建Git服务器

    使用Gitosis搭建Git服务器 作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/build- ...

  6. CentOS 6.4 搭建git 服务器

    CentOS 6.4 搭建git 服务器 (2013-11-22 19:04:09)转载▼ 标签: it 分类: Linux 此文件是依据markdown所编写,更好效果参见本人github的文档ht ...

  7. Windows平台使用Gitblit搭建Git服务器图文教程

    Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭源的项目就会收取昂贵的费用,如果你不缺米,那么不在本文讨论的范 ...

  8. 在linux中搭建git服务器

    个人觉得, 以下搭建git服务器的过程就像是在linux增加了一个用户, 而这个用户的登录shell是 git-shell, 太刨根问底的东西我也说不清楚, 还是看下面的过程吧. 过程参考了网上的文章 ...

  9. 最新搭建GIT服务器仓库

    新开了一个项目,现在需要将代码放在公司GIT服务器上面.所以这里需要了一些问题..记录一下.因为原来公司这边的服务器的git用户都是创建好的.这里没有创建.需要的可以看看:http://www.cnb ...

随机推荐

  1. .NET Core微服务之基于Jenkins+Docker实现持续部署(Part 1)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.CI, CD 与Jenkins 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous i ...

  2. 辅助模式最终考验的是想象力,先来看看怎么用!| Accessibility

    一.序 Hi,大家好,我是承香墨影! Android 的辅助模式(Accessibility)功能非常的强大.基本上被获取到授权之后,可以监听手机上的任何事件,例如:屏幕点击.窗口的变化.以及模拟点击 ...

  3. 【Android Studio安装部署系列】二十八、Android Studio查看其它APP的布局结构

    概述 日常使用别家的APP过程中,会遇到一些比较好看的布局,这时候我们就想学习一下别人的布局结构,以便参考. (1)手机连接电脑.设置手机为USB调试模式 参考<[Android Studio安 ...

  4. Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! WebFlux 系列教程大纲 一.背景 大家都知道,Sprin ...

  5. 初探Parcel

    昨天趁有点时间看了前不久很火的构建工具Parcel,这里说下初步使用的感受,尤其是将其放到实际项目中和Webpack进行比较. 一.前言 首先说下笔者目前的技术栈.最近的前端项目主要以管理后台为主,技 ...

  6. Saslauthd服务实现SMTP发信认证

    一.SMTP发信认证 通过sasl库中的saslauthd服务实现SMTP认证 二.部署 1.先安装postifx 略 2.生成sasl配置文件,实现使用sasl认证 vim /usr/lib64/s ...

  7. Python实例----------每日一贴

    def function_tips(): '''功能:每天输出一条励志文字 ''' import datetime # 导入日期时间类 # 定义一个列表 mot = ["今天星期一:\n人生 ...

  8. Spring MVC(三)控制器获取页面请求参数以及将控制器数据传递给页面和实现重定向的方式

    首先做好环境配置 在mvc.xml里进行配置 1.开启组件扫描 2.开启基于mvc的标注 3.配置试图处理器 <?xml version="1.0" encoding=&qu ...

  9. Skyline Terra Explorer6.6弹出窗口实现复制功能

    前段时间继续下来的基于Skyline的B/S项目,是基于Terra Explorer6.6实现的.项目中涉及到基于三维模型查询设备编码等操作,从用户友好角度来讲,查询到的设备编码应该要支持复制,方便用 ...

  10. QT通过url下载图片到本地

    /* strUrl:下载图片时需要的url strFilePath:下载图片的位置(/home/XXX/YYY.png) */ void ThorPromote::downloadFileFromUr ...