• 创建管理员git

    • 为管理员用户添加sudo权限
    • 生成管理员秘钥
    • 设置管理员git提交账号和邮箱
  • 下载安装gitolite
  • 启动gitolite
  • 添加项目版本库
  • 添加项目成员
  • 项目成员下载项目
  • gitolite权限控制

创建管理员git

以root用户的形式创建一个专门管理git服务器的管理员

创建管理员git

root@ghost-machine:/home/ghost# adduser git
正在添加用户"git"...
正在添加新组"git" (1001)...
正在添加新用户"git" (1001) 到组"git"...
创建主目录"/home/git"...
正在从"/etc/skel"复制文件...
输入新的 UNIX 密码:
重新输入新的 UNIX 密码:
passwd:已成功更新密码
正在改变 git 的用户信息
请输入新值,或直接敲回车键以使用默认值全名 []: 房间号码 []: 工作电话 []: 家庭电话 []: 其它 []:
这些信息是否正确? [Y/n] y
root@ghost-machine:/home/ghost#

Ubuntu会在创建的时候设置密码,若其他系统没有提示设置密码,需要手动设置git管理员密码
命令:sudo passwd git

有些网站建议关闭git管理员的ssh访问,但目前不做这一步。

为管理员用户添加sudo权限

编辑文件/etc/sudoers,该文件要更变成可写模式

root@ghost-machine:~# ll /etc/sudoers
-r--r----- 1 root root 755 5月  29  2017 /etc/sudoers
root@ghost-machine:~# chmod +w /etc/sudoers
root@ghost-machine:~# vim /etc/sudoers
root@ghost-machine:~# chmod -w /etc/sudoers
root@ghost-machine:~# ll /etc/sudoers
-r--r----- 1 root root 778 12月  9 10:20 /etc/sudoers
root@ghost-machine:~#

编辑内容,在root后面加上git

# User privilege specification
root    ALL=(ALL:ALL) ALL
git     ALL=(ALL:ALL) ALL

生成管理员秘钥

切换到git用户并跳转到自己的工作目录下

root@ghost-machine:/home/ghost# su git
git@ghost-machine:/home/ghost$ cd
git@ghost-machine:~$

生成git管理员秘钥,输入的是用户名和邮箱的组合

git@ghost-machine:~$ ssh-keygen -t rsa -C "git@email.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/git/.ssh/id_rsa.
Your public key has been saved in /home/git/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:FxzVolVlTN5iK9XATCVHADyt4mHkN+zR036f+oB91XI git@email.com
The key's randomart image is:
+---[RSA 2048]----+
|          .ooO*BB|
|         ...= =Bo|
|         oo+ =+.+|
|          *.*oooo|
|        So.=.oooE|
|         .. +. o+|
|           . o .+|
|              o..|
|             .o. |
+----[SHA256]-----+
git@ghost-machine:~$

设置管理员git提交账号和邮箱

git@ghost-machine:~$ git config --global user.name "git"
git@ghost-machine:~$ git config --global user.email  "git@email.com"

下载安装gitolite

下载地址:下载路径最好放在/home/git/下

命令:git clone git://github.com/sitaramc/gitolite

git@ghost-machine:~$ git clone git://github.com/sitaramc/gitolite
正克隆到 'gitolite'...
remote: Counting objects: 9509, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 9509 (delta 4), reused 5 (delta 2), pack-reused 9495
接收对象中: 100% (9509/9509), 3.00 MiB | 587.00 KiB/s, 完成.
处理 delta 中: 100% (5881/5881), 完成.
检查连接... 完成。
git@ghost-machine:~$

或:
使用Ubuntu的apt-get(禁止)
命令:sudo apt-get install gitolite3

不同的版本命令不同,但这样安装后将命令放入/usr/local/bin中,给别的用户暴露了软件gitolite,不符合最小授权原则。

用sudo下载安装时需要输入管理员的sshkey,命令行包含install,因此可以跳过下一步的安装。

创建文件夹bin,保证gitolite只有管理员用户git使用

mkdir -p ${HOME}/bin

安装gitolite

git@ghost-machine:~$ ${HOME}/gitolite/install -to ${HOME}/bin
git@ghost-machine:~$ ls bin/
commands  gitolite  gitolite-shell  lib
syntactic-sugar  triggers  VERSION  VREF
git@ghost-machine:~$

手动下源码安装保证gitolite的控制权在git管理员手上。

将命令加入系统环境变量中。
sudo /etc/profile

export PATH=$PATH:$HOME/bin

启动gitolite

将管理员生成的sskkey加载在软件中

git@ghost-machine:~$ gitolite setup -pk ~/.ssh/id_rsa.pub
初始化空的 Git 仓库于 /home/git/repositories/gitolite-admin.git/
初始化空的 Git 仓库于 /home/git/repositories/testing.git/
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one(this is normal on a brand new install)
git@ghost-machine:~$

gitolite的管理都围绕gitolite-admin.git这个版本库进行。管理服务器的项目git版本库,用户的添加删除,项目git版本库的授权。

为统一管理服务器版本库,后续添加git版本库都统一交给gitolite-admin.git进行统一管理。

gitoltie会用相对路径去下载版本库。

管理员git首先要下载gitolite-admin.git,下载需要输入管理员sshkey的密码。

git@ghost-machine:~$ git clone git@localhost:gitolite-admin.git
正克隆到 'gitolite-admin'...
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is
SHA256:ifKZZ/A2lLcOGPCOaQIOTVvvD+fgAgGiB2WJN4R00Xw.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/git/.ssh/id_rsa':
remote: 对象计数中: 6, 完成.
remote: 压缩对象中: 100% (4/4), 完成.
remote: Total 6 (delta 0), reused 0 (delta 0)
接收对象中: 100% (6/6), 完成.
检查连接... 完成。
git@ghost-machine:~$

添加项目版本库

进入下载好的gitolite-admin版本库中,编辑文件gitolite.conf

命令:vim conf/gitolite.conf

添加的项目名为:zx_git_repo

git@ghost-machine:~/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 8eb9fbb..64e882d 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -3,3 +3,6 @@ repo gitolite-adminrepo testingRW+     =   @all
+
+repo zx_git_repo
+    RW+     =   id_rsa
git@ghost-machine:~/gitolite-admin$

项目设置为git管理员可以管理,git管理员对应名称id_rsa
在文件keydir会自动创建加载的管理员公钥

git@ghost-machine:~/gitolite-admin$ ls keydir/
id_rsa.pub

将修改push到库中

git@ghost-machine:~/gitolite-admin$ git add .
git@ghost-machine:~/gitolite-admin$ git commit -m "add repo zx_git_repo."
[master 5d8b89b] add repo zx_git_repo.1 file changed, 3 insertions(+)
git@ghost-machine:~/gitolite-admin$ git push origin master
Enter passphrase for key '/home/git/.ssh/id_rsa':
对象计数中: 4, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (3/3), 完成.
写入对象中: 100% (4/4), 382 bytes | 0 bytes/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
remote: 初始化空的 Git 仓库于 /home/git/repositories/zx_git_repo.git/
To git@localhost:gitolite-admin.git6c9b6a3..5d8b89b  master -> master
git@ghost-machine:~/gitolite-admin$

随着gitolite-admin的更改,gitolite会在版本库中初始化添加的库,添加的版本库就在/home/git/repositories/zx_git_repo.git/下

添加项目成员

项目需要添加成员,成员通过邮件或其他通信方式发送自己sshkey公钥给git管理员,将id_rsa.pub修改成自己的名字以便识别。

管理员拿到新成员的公钥后将其复制到keydir目录下

git@ghost-machine:~/gitolite-admin$ cp /mnt/hgfs/share/user_zx.pub keydir/
git@ghost-machine:~/gitolite-admin$ ls keydir/
id_rsa.pub  user_zx.pub

编辑文件gitolite.conf

git@ghost-machine:~/gitolite-admin$ git diff
diff --git a/conf/gitolite.conf b/conf/gitolite.conf
index 64e882d..b173b92 100644
--- a/conf/gitolite.conf
+++ b/conf/gitolite.conf
@@ -1,3 +1,6 @@
+@admin = id_rsa
+@user = user_zx
+repo gitolite-adminRW+     =   id_rsa@@ -5,4 +8,5 @@ repo testingRW+     =   @allrepo zx_git_repo
-    RW+     =   id_rsa
+    RW+     =   @admin
+    RW+     =   @user
git@ghost-machine:~/gitolite-admin$

这里将用户分组,分成admin和user,若有多个用户,用空格隔开

将修改push到库中

git@ghost-machine:~/gitolite-admin$ git add .
git@ghost-machine:~/gitolite-admin$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。
要提交的变更:(使用 "git reset HEAD <文件>..." 以取消暂存)修改:     conf/gitolite.conf新文件:   keydir/user_zx.pubgit@ghost-machine:~/gitolite-admin$ git commit -m "add user user_zx to zx_git_pro."
[master 07faacc] add user user_zx to zx_git_pro.2 files changed, 6 insertions(+), 1 deletion(-)create mode 100755 keydir/user_zx.pub
git@ghost-machine:~/gitolite-admin$ git push origin master
Enter passphrase for key '/home/git/.ssh/id_rsa':
对象计数中: 6, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (6/6), 816 bytes | 0 bytes/s, 完成.
Total 6 (delta 1), reused 0 (delta 0)
To git@localhost:gitolite-admin.git5d8b89b..07faacc  master -> master
git@ghost-machine:~/gitolite-admin$

项目成员下载项目

添加成功成员后,发送git项目的下载地址给对应成员,即可下载项目

项目地址:git@192.168.215.132:zx_git_repo.git

$ git clone git@192.168.215.132:zx_git_repo.git
Cloning into 'zx_git_repo'...
Enter passphrase for key '/c/Users/zx_work/.ssh/id_rsa':
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

gitolite将下载路径变成相对地址访问,若不用gitolite管理,需要输入绝对地址并且输入git管理员的密码。
使用了gitolite管理之后,只需要输入授权成员的sskey即可。

推送代码

$ git push  origin master
Enter passphrase for key '/c/Users/zx_work/.ssh/id_rsa':
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 328 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@192.168.215.132:zx_git_repo.git* [new branch]      master -> master

通过git管理员可以查看到该用户能够正常提交代码

git@ghost-machine:~/repositories/zx_git_repo.git$ git log
commit 541c1a53aa884a69d41b9e70b06bdeb7756ed747
Author: zxng <zxngyulin@163.com>
Date:   Sat Dec 9 12:21:21 2017 +0800add README.md
git@ghost-machine:~/repositories/zx_git_repo.git$

gitolite权限控制

git版本管理软件——搭建git服务器相关推荐

  1. (十九)git版本管理软件——搭建git服务器

    创建管理员git 为管理员用户添加sudo权限 生成管理员秘钥 设置管理员git提交账号和邮箱 下载安装gitolite 启动gitolite 添加项目版本库 添加项目成员 项目成员下载项目 gito ...

  2. windows 本地搭建git仓库_搭建Git服务器

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

  3. ❤️❤️爆肝3万字整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)❤️❤️

    小白快速快入门Git 什么是Git SVN VS Git 什么是版本控制 安装Git 谁在操作? Git本地仓库 本地仓库构造 重点 Git常用基本操作 git add git commit git ...

  4. Git版本管理软件使用

    Git是目前世界上最先进的分布式版本控制系统,下面介绍如何使用Git管理项目. 一.下载Window Git工具 https://pan.baidu.com/s/1EF_KybTb32VACzXniF ...

  5. git版本管理软件——git发布补丁和打补丁

    某几个文件的代码修改后要发到同事开发的代码中,或者修复了bug后要将修复的代码添加到另外一份库中,这个时候手动记下改动太麻烦,git有创建补丁的功能,即将改动的代码统一添加到一个补丁文件中,后缀名为. ...

  6. Linux git版本管理的使用/git教程

    转自:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 1.git教程 史上最浅显易 ...

  7. 代码管理平台介绍、安装svn、客户端使用svn、远程仓库、分支管理、标签管理、git别名、搭建git服务、安装gitlab、简单使用gitlab、备份和恢复

    22.1 代码管理平台介绍 现在的开发工作都是由团队合作来完成开发,通常都是团队中的每个人或者每几个人完成一个模块的开发,最后再将模块拼凑起来,形成一个完整的项目,这就涉及到了协同开发.在各个模块的开 ...

  8. 使用FileZilla等软件搭建ftp服务器

    FTP的全称是File Transfer Protocol(文件传输协议).顾名思义,就是专门用来传输文件的协议. FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务.简单地 ...

  9. FileZilla等软件搭建ftp服务器

    一.常用的几款ftp服务器软件介绍 1.1 Server-U Serv-U是一种被广泛运用的FTP服务器端软件,支持3x/9x/ME/NT/2K/2000/xp等全Windows系列.可以设定多个FT ...

最新文章

  1. HTTP协议,之入门初尝
  2. 结构指针的坑之(定义结构体指针时并没有分配存储空间,所以要用malloc()申请空间)
  3. java定时器偶尔重复推送_在Java中创建重复的定时器提醒
  4. 厉害了!谷歌新发布的半监督学习算法降低4倍错误率
  5. 再识PCI:一个PCI驱动实例
  6. Java-构建器模式(Buider模式)
  7. 可重构计算芯片是未来吗?开发者如何抓住这一机会
  8. sqoop 中文文档 User guide 三 export
  9. mybatis update 不为空的_详解MyBatis-Plus updateById方法更新不了空字符串/null解决方法...
  10. 苹果系统备份文件服务器地址,IOS备份到tftp服务器和升级IOS
  11. OCR怎么能离开扫描仪呢?
  12. 不同速度流体的剪切形成不同尺度的漩涡,看起来很像分形。
  13. 解决import cv2找不到指定模块问题
  14. 从python入门到人生巅峰
  15. unet医学肺部ct图分割简单记录
  16. linux 命令last -x,查询linux系统重启记录的last命令
  17. 换电脑后如何快速同步原先设备上vscode的插件
  18. 读书笔记:汇编语言 第三版 王爽 清华出版社 前言 章一 章二 章三 章四 章五
  19. 自动弹窗加qq群教程
  20. MySQL可重复读级别会不会造成幻读

热门文章

  1. 天河一号超级计算机研究成功,超级计算机“天河一号”研制成功
  2. html五子棋人机对战,JS+canvas实现五子棋人机大战
  3. Windows 搜索
  4. 你真的认为iPhone只是一部手机?苹果惊天秘密之 二
  5. 厦大C语言上机 1510 小明的随机数
  6. 如何给码农的Mac开光
  7. android h5 离线缓存,H5 应用程序缓存(离线缓存)
  8. php怎么显示gif图片,如何让伪进度条在页面上显示成gif图像
  9. 看井上雄彦是如何作画的!
  10. 2022-2028全球汽车压力传感器行业发展现状调研及投资前景分析报告