ubuntu14.10server搭建git服务器成功记录

Wesley13
• 阅读 539

安装配置git

  1. 安装git和openssh。在当前用户下执行如下命令安装git和openssh:
    sudo apt-get install git-core openssh-server openssh-client

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

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

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

    安装提示失败,可能是因为系统软件库的索引文件太旧了,先更新一下就可以了,更新命令如下:

    sudo apt-get update

  2. 配置git

  • 创建所有代码仓库和用户权限的管理者git,并更改用户的密码。在当前用户下执行:
    sudo useradd -m -s /bin/bash git
    sudo passwd git

    useradd会在ubuntu上增加一个git用户

  • 创建git仓库的存储目录、更改文件目录属主为代码仓库的管理者git,只让git用户对此目录有权限。本文档以/home/repo目录做为git仓库的存储目录。在当前用户下执行:
    sudo mkdir /home/repo
    sudo chown git:git /home/repo
    sudo chmod 700 /home/repo

安装配置gitosis

  1. 安装gitosis前准备
  • 初始化git用户。在任何一台机器上使用git,第一次必须初始化一下。在当前用户下初始化全局的git信息:
    git config --global user.name "jackliu"
    git config --global user.email "xcltl618@gmail.com"

  • 安装python的setup tool。在当前用户下执行如下命令安装:
    sudo apt-get install python-setuptools

  1. 安装gitosis。在当前用户下进行安装,执行如下命令: 

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

    上面有2个零啊,不要打错了

  2. cd gitosis
    sudo python setup.py install
    默认状态下,gitosis会将git仓库放在 git用户的home下,所以我们做一个链接到/home /repo,su到git用户,执行如下命令:
    ln -s /home/repo /home/git/repositories
    然后退出git用户,一定要切换到git用户下执行

  3. 配置gitosis。如果你是git服务器的管理员,在你的计算机上(最好是另一台PC)来生成访问git服务器的ssh公钥,然后将生成的公钥拷贝到git服务器,执行相关命令来允许你用个人的计算机进行访问和管理git服务器。本文档以liutailin@liutailin-ThinkPad-Edge来做为远程访问和控制git服务器的管理用户。如果另外一台电脑还是linux的电脑,还要在linux上安装上git(传送下载地址http://git-scm.com/downloads),并且初始化用户git config那两句命令,如果是linux,在此计算机上的/home/liutailin目录下,执行如下命令:

  • 在你的PC上选择一个用户做为远程访问及管理git服务器的用户,同时并生成ssh公钥。在选中的用户的home下,执行如下命令:
    ssh-keygen -t rsa

    windows电脑也一样是通过这个命令来生成公钥,默认保存在c盘用户文件夹下的.ssh文件夹,id_rsa.pub是公钥,用于身份验证的

  • 将生成的公钥拷贝到服务器的/tmp下,注意要把改成git服务器对应的IP地址:
    scp .ssh/id_rsa.pub git@<server-IP>:/tmp

    你也可以直接用U盘拷贝id_rsa.pub到这台服务器上到/tmp目录下

  • 回到git服务器/tmp/gitosis目录,执行:
    sudo chmod a+r /tmp/id_rsa.pub

  • 在git服务器上执行如下命令,让gitosis运行起来:
    sudo -H -u git gitosis-init < /tmp/id_rsa.pub
    会出现如下应答:
    Initialized empty Git repository in /home/repo/gitosis-admin.git/ Reinitialized existing Git repository in /home/repo/gitosis-admin.git/

  • gitosis通过一个git仓库来管理配置文件,仓库放在/home/repo/gitosis- admin.git。我们需要为一个文件加上可执行权限,以root用户登录,
    cd /home/git/repositories
    cd gitosis-admin.git/
    sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update

exit

在git服务器上搭建测试项目库

  1. 建立仓库名“test”的测试仓库。在git服务器上切换到git用户,执行如下命令建立测试仓库:
    su - git
    cd /home/repo
    mkdir test.git
    cd test.git
    git init --bare
    exit
    到目前为止,这只是一个空仓库,空仓库是不能clone的。为了能clone,我们必须先让某个有权限的人放一个初始化的版本到仓库中。所以,我们必须先修改一下gitosis-admin。此时需要 管理gitosis的配置文件。

  2. gitosis本身的配置也是通过git来实现的。

  • 克隆gitosis-admin.git仓库。
    在git管理员用户目录下,把gitosis-admin.git这个仓库clone下来,接下来我们可以用管理员的身份修改配置了。在git管理员用户目录下执行:

     git clone git@<server>:gitosis-admin.git

    在windows电脑上git base下一样执行这个克隆命令
    如果出现:
    fatal: '~/gitosis-admin.git' does not appear to be a git repository fatal: The remote end hung up unexpectedly
    改成:
    sudo git clone git@<Server-IP>:/home/repo/gitosis-admin.git

  • 拷贝需要访问git服务器的开发用户的ssh公钥 获取仓库后,执行
    cd gitosis-admin/            进入到刚刚克隆的管理仓库
    该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥:各个用户按照前面提到的办法生成各自的ssh公钥文件后,把所有人的ssh公钥文件都拿来,按名字命名一下,比如b@pc1.publz@pc2.pub等,统统拷贝到keydir下:
    su root

  • cp /path/.ssh/id_rsa.pub ./keydir/b@pc1.pub
    exit

    windows下直接复制粘贴

  • 修改gitosis.conf文件
    [gitosis]
    [group gitosis-admin]
    members = test@liutailin-ThinkPad-Edge ltl@it-c-015
    writable = gitosis-admin 

    [group hello]
    members = ltl@liutailin-ThinkPad-Edge ltl@it-c-015
    writable = test

    这个配置文件说明:

    members = 后面跟的一定要和 .pub的前缀一致,否则没有访问权限

    目前这些配置文件的修改只是在你的本地,你必须推送到远程的gitserver上才能真正生效。 加入新文件、提交并push到git服务器:
    git add .
    git commit -am “add test prj and users”
    git push origin master

  • gitosis-admin组成员有test@liutailin-ThinkPad-Edge, ltl@it-c-015, 该组对gitosis-admin仓库有读写权限;

  • hello组有test@liutailin-ThinkPad-Edge, ltl@it-c-015两个成员, 该组对test仓库有读写权限;

测试搭建的项目库

服务器搭建完了,并且有一个空的项目test在服务器上。接下来测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始化一个版本。 下面是在ltl@it-c-015客户端完成。
mkdir test-ori
cd test-ori/
git init
echo “/*add something*/” > hello
git add .

git commit -am “initial version”
git remote add origin git@<server-ip>:test.git
git push origin master
到此,test已经有了一个版本了,test仓库的其他成员只要先clone一下test仓库,就可以进行仓库的开发了。下面是一个用户b来克隆test:
su b
cd /home/b
git clone git@<server-ip>:test.git
cd teamwork
vim hello
git add .
git commit -am “b add”
git push origin master
exit

在git服务器上添加已有git项目

当我们有一个现成的git仓库,想放到 gitserver上供team使用。以zark仓库为例。 

  • 首先需要从你的工作仓库中得到一个纯仓库, 比如你的工作目录为~/kernel, 你想导出纯仓库到指定路径,然后拷贝到gitserver上去。
    git clone –bare ~/workspace/zark ~/zark.git

  • 然后把zark.git 拷贝到git服务器/home/repo/下,同时把zark.git的所有者变更为git scp ~/zark.git git@<server-ip>:/home/repo/
    chown -R git:git /home/repo/zark.git

  • 同时需要配置 gitosis相关配置文件,增加zark仓库的用户

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这