创建管理员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. iOS进阶--将项目的编译速度提高5倍

    前言 作为开发团队的负责人,最近因为在快速迭代开发新功能,项目规模急速增长,单个端业务代码约23万行,私有库约6万行,第三方库代码约15万行,单个客户端的代码行数约60万.现在打包一次耗时需要11~1 ...

  2. BZOJ 1597 土地购买(斜率优化DP)

    如果有一块土地的长和宽都小于另一块土地的长和宽,显然这块土地属于“赠送土地”. 我们可以排序一下将这些赠送土地全部忽略掉,一定不会影响到答案. 那么剩下的土地就是长递减,宽递增的.令dp[i]表示购买 ...

  3. BZOJ 1406 密码箱(数论)

    很简洁的题目.求出x^2%n=1的所有x<=n的值. n<=2e9. 直接枚举x一定是超时的. 看看能不能化成有性质的式子. 有 (x+1)(x-1)%n==0,设n=a*b,那么一定有x ...

  4. BZOJ 1149 风铃(树形DP)

    题目描述的实际是一颗二叉树,对于每个结点,要么满叉,要么无叉. 对于一种无解的简单情况,我们搜一遍树找到最浅的叶子结点1和最深的叶子结点2,如果dep[1]<dep[2]-1,则显然无解. 所以 ...

  5. 【bzoj1507】[NOI2003]Editor /【bzoj1269】[AHOI2006]文本编辑器editor Splay

    [bzoj1507][NOI2003]Editor 题目描述 输入 输入文件editor.in的第一行是指令条数t,以下是需要执行的t个操作.其中: 为了使输入文件便于阅读,Insert操作的字符串中 ...

  6. BZOJ4873 Shoi2017寿司餐厅(最小割)

    选择了某个区间就必须选择其所有子区间,容易想到这是一个最大权闭合子图的模型.考虑将区间按长度分层,相邻层按包含关系连边,区间[i,j]的权值即di,j,其中最后一层表示长度为1的区间的同时也表示寿司本 ...

  7. POJ3621:Sightseeing Cows——题解

    http://poj.org/problem?id=3621 全文翻译参自洛谷:https://www.luogu.org/problemnew/show/P2868 题目大意:一个有向图,每个点都有 ...

  8. 【BZOJ4889】[Tjoi2017]不勤劳的图书管理员 分块+树状数组

    [BZOJ4889][Tjoi2017]不勤劳的图书管理员 题目描述 加里敦大学有个帝国图书馆,小豆是图书馆阅览室的一个书籍管理员.他的任务是把书排成有序的,所以无序的书让他产生厌烦,两本乱序的书会让 ...

  9. 你会喜欢的前端^o^!

    前端那些事儿 网页设计常用色彩搭配表 很漂亮的alert弹出框 一个让你想到即可做到的web弹窗/层解决方案 基于HTML5的在绘图特效平台(酷炫)

  10. django项目初探

    一:创建django项目 设置数据库(默认sqlit3) mysql: setting:中设置 DATABASES = { 'default': { 'ENGINE': 'django.db.back ...