创建管理员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:~$

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

将命令加入系统环境变量中。 
sudo vi /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-admin repo testing
RW+ = @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.git
6c9b6a3..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-admin
RW+ = id_rsa @@ -5,4 +8,5 @@ repo testing
RW+ = @all repo 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.pub git@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.git
5d8b89b..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 +0800 add README.md
git@ghost-machine:~/repositories/zx_git_repo.git$

  

  

 

  

  

  

  

  

  

  

  

  

 

 

  

(十九)git版本管理软件——搭建git服务器的更多相关文章

  1. (转)初学Git及简单搭建git服务器和客户端

    终于搞定,mac自己作为git服务器,mac也是客户端,如何免登 从另外一个linux服务器的上传公钥得到提示 ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168 ...

  2. 熬夜整理小白入门与提升分布式版本管理软件:Git,图文并茂(建议收藏)

    @ 目录 什么是Git SVN VS Git 什么是版本控制 安装Git 谁在操作? Git本地仓库 本地仓库构造 重点 Git常用基本操作 git add git commit git diff g ...

  3. ❤️❤️爆肝3万字整理小白快速入门分布式版本管理软件:Git,图文并茂(建议收藏)--已码一万字❤️❤️

    @ 目录 什么是Git SVN VS Git 什么是版本控制 安装Git 谁在操作? Git本地仓库 本地仓库构造 重点 Git基本操作 git add git commit git diff git ...

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

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

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

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

  6. 【php增删改查实例】第十九节 - session的使用: 让服务器知道你是谁?

    因为HTTP请求是一种无状态的请求,所谓无状态,就是服务器不会记录下你本次请求的信息.http它是基于请求 - 相应模式的一种数据传输协议.就是说,你发送一个请求,我服务器给你一个响应,这件事情就算完 ...

  7. 使用delphi 开发多层应用(十九) ios通过soap 访问kbmmw服务器

    随着delphi XE4 的推出,开始真正意义上支持ios 的开发,由于目前kbmmw 还不完全支持ios 的开发,因此 无法直接使用kbmmw 的客户端访问kbmmw 的服务器(虽然kbmmw 也提 ...

  8. 十九,基于helm搭建EFK日志收集系统

    目录 EFK日志系统 一,EFK日志系统简介: 二,EFK系统部署 1,EFK系统部署方式 2,基于Helm方式部署EFK EFK日志系统 一,EFK日志系统简介: 关于系统日志收集处理方案,其实有很 ...

  9. GIT版本管理工具

    原文:http://blog.csdn.net/ithomer/article/details/7527877 Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介 ...

随机推荐

  1. 第23天:js-数据类型转换

    一.padding1.内边距会影响盒子大小2.行内元素,尽量不用上下的padding和margin3.块元素嵌套块元素.子级会继承父级的宽度,高度由内容决定.如果给子级再设置padding,不会影响盒 ...

  2. MATLAN中矩阵表示中有一维是~表示的意思

    [~,m]表示的意思解释. [~,m]=rat(12/34) m = 17 >> [x,m]=rat(12/34) x = 6 m = 17

  3. 使用mac电脑,对Github客户端的简单操作1----开源项目

    工作之余自己也会一写一些小的程序项目,由于一直没时间“折腾”开源,之前写博客都是直接粘代码片段,今天看别人写技术博客大都会放出项目Github地址,突然感觉自己有点点out and low,作为一个励 ...

  4. 【bzoj4921】[Lydsy六月月赛]互质序列 暴力

    题目描述 给出一个序列,要求删除一段非空区间,使得剩下的数的个数大于等于2.求所有删除方式剩下的数的最大公约数的和. 输入 第一行包含一个正整数n(3<=n<=100000),表示序列的长 ...

  5. ictclas4j 分词工具包 安装流程

    首先把 ictclasj解压缩,然后 1.把 Data文件夹整个拷贝到 Eclipse项目的文件夹下, 2.而 bin目录下的 org文件夹整个拷贝到你 Eclipse项目的 bin目录下,(将cla ...

  6. POJ2195:Going Home——题解

    http://poj.org/problem?id=2195 题目大意: 有些人和房子,一个人只能进一个房子,人走到房子的路程即为代价. 求所有人走到房子后的最小代价. ——————————————— ...

  7. BZOJ2938 & 洛谷2444:[POI2000]病毒——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2938 https://www.luogu.org/problemnew/show/P2444 二进制 ...

  8. ZOJ3496:Assignment——题解

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3496 题目大意:A公司从S到T运货,每条路都有一个运货上限,而B公司则有p ...

  9. 项目管理---git----快速使用git笔记(七)------coding.net项目管理多人操作的流程规范--合并代码审核

    我们在前面已经介绍了coding.net和本地git的基本用法. 但是多人协作开发时情况会复杂得多,所以我们最好有一些规范来保证项目多人开发顺利进行. 比如说 规范一 master代码分支  需要开启 ...

  10. React组件通信

    1.父子通信 父 -> 子 props子 -> 父 回调函数,父组件通过props向子组件传递一个函数,子组件调用函数,父组件在回调函数中用setState改变自身状态 2.跨层级通信 1 ...