20200619 前一段时间学习 git 时,尝试过搭建公司自用的 git 服务器,并且安装了 gitlab 社区版

后来,因为大家都不太熟悉,而且英文也不好,只好直接采用了 码云 gitee 企业版作为入门

然后,以上搭建过程也都忘记得差不多了!

疫情期间闲下来,再次重走一遍,并记录下来,以备日后 gitee 过期时再次遗忘

1、 安装git

$ sudo apt install git

重新找了一个 visualBox 虚拟机, ubuntu 20.04,不记得安装过 git ,但是却发现 git 已经存在!

2、创建一个git用户,用来运行git服务

sudo adduser git
Passed = 123

如果尝试过多次,可能会已经存在 git 用户,可以先完全删除 git 用户及其目录

$ sudo userdel -r git
userdel: git mail spool (/var/mail/git) not found
这个错误好像没有发现什么影响!

3、创建一个 git 仓库目录

cd /home
$ sudo mkdir gitrepo
$ cd gitrepo

前几次操作时,直接用有 root 权限的用户名登录,并且直接在该用户的 home 下建立的仓库目录(没有 cd /home),后续 clone 时却没有加上该用户的 home 路径,造成过多次错误!

4、初始化 Git 仓库

$ sudo git init --bare --shared sample.git

返回结果:
Initialized empty shared Git repository in /home/gitrepo/sample.git/

注意返回提示的仓库路径: /home/gitrepo/sample.git/
在客户端 clone 时一定要写正确了!
如果如上一步所提到的:没有 cd /home , 这里的路径会带上实际登录的用户名
例如:/home/dhbm/srv/sample.git/

5、 修改仓库目录 owner 为 git

sudo chown -R git:git /home/gitrepo

确认一下

$ ll
...
drwxrwsr-x 7 git  git  4096 Jun 19 09:58 sample.git/

6、 客户端测试一下

$ git clone git@192.168.1.203:/gitrepo/sample.git

报错了!

Cloning into 'sample'...
git@192.168.1.203's password:
fatal: '/gitrepo/sample.git' does not appear to be a git repository
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.

仓库路径没有书写正确!请对照前面 init 时返回的路径信息
再来!

$ git clone git@192.168.1.203:/home/gitrepo/sample.git/
Cloning into ‘sample’…
git@192.168.1.203’s password:
warning: You appear to have cloned an empty repository.

确认一下:

 $ ls -altotal 0drwxr-xr-x   3 dhbm  staff   96  6 19 13:43 .drwx------+ 24 dhbm  staff  768  6 19 14:10 ..drwxr-xr-x   3 dhbm  staff   96  6 19 13:43 sample

这就 ok 了!

如果只是个人使用,到这里就算完成了!
如果公司多人使用,建议给每个人单独分配一个账号,否则,仓库无法管理了

7、 再创建几个用户,并统一到 gitgroup 组

  1. 创建git用户组
    $ sudo addgroup gitgroup
    Adding group `gitgroup’ (GID 1004) …
    Done.

  2. 新建几个账户
    sudo adduser gituser1
    sudo adduser gituser2

  3. 将用户添加到 gitgroup 用户组
    sudo usermod -G gitgroup git
    sudo usermod -G gitgroup gituser1
    sudo usermod -G gitgroup gituser2

  4. 确认一下用户组
    $ cat /etc/group |grep git

    ......
    gitgroup:x:1004:gituser1,gituser2,git
    

8、 修改git仓库的用户组

sudo chgrp -R gitgroup /home/gitrepo/sample.git/

或者

sudo chown -R :gitgroup /home/gitrepo/sample.git/

9、 客户端分别测试一下

$ git clone gituser1@192.168.1.203:/home/gitrepo/sample.git/
$ git clone gituser2@192.168.1.203:/home/gitrepo/sample.git/

自行确认一下即可!

10、善后

刚才建立了几个用户,只作为 git 使用,所以,必须禁止他们实际登录到服务器
学习 git 的时候,注意力不在这里,所以,放在最后单独处理!

$ sudo usermod -s /sbin/nologin gituser1

就地测试一下

 $ su gituser1Password: This account is currently not available.

$ sudo usermod -s /sbin/nologin git

$ sudo usermod -s /sbin/nologin gituser2

** 后续测试结果证实:不能按照这个办法禁止登录!
摘录如下:
sudo vim /etc/passwd
找到

git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

11、 后续

  1. 客户端测试提交一点儿内容

    cd /Users/dhbm/Desktop/git-test/sample

  2. 查看一下远程仓库
    $ git remote -v
    origin gituser1@192.168.1.203:/home/gitrepo/sample.git/ (fetch)
    origin gituser1@192.168.1.203:/home/gitrepo/sample.git/ (push)

  3. vim test.md
    随意输入一些东西!

  4. $ git add *

  5. $ git commit -m ‘20200619,just test’

     [master (root-commit) e4b701f] 20200619,just test1 file changed, 7 insertions(+)create mode 100644 test.md
    
  6. $ git push
    怎么报错了!

     gituser1@192.168.1.203's password: Could not chdir to home directory /home/gituser1: No such file or directoryfatal: protocol error: bad line length character: This
    
  7. 查看一下用户
    $ cat /etc/passwd |grep git

    git❌1001:1001:,:/home/git:/sbin/nologin
    gituser1❌1002:1002::/home/gituser1:/sbin/nologin
    gituser2❌1003:1003:,:/home/gituser2:/bin/bash

  8. 上服务端查看一下仓库目录
    $ ll

     ......drwxr-xr-x  3 git      git      4096 Jun 19 10:00 git/drwxr-xr-x  3 git      git      4096 Jun 19 09:58 gitrepo/drwxr-xr-x  2 gituser2 gituser2 4096 Jun 19 13:34 gituser2/
    

    怎么 gitrepo 还是属于 git:git ,前面修改组没有成功?

    sudo chown -R :gitgroup /home/gitrepo/sample.git/

  9. 换成 git 试试

$ git clone git@192.168.1.203:/home/gitrepo/sample.git/
见鬼了!这次连 clone 也错了?

Cloning into 'sample'...
git@192.168.1.203's password:
fatal: protocol error: bad line length character: This

怎么回事?难道是我们善后工作没有做好,不应该这样子禁止 git 用户登录?

  1. 改用 gituser2 试试
    好在刚才只是学习,禁止登陆并没有操作到 gituser2

    $ git clone gituser2@192.168.1.203:/home/gitrepo/sample.git/
    这个是正确的!

    Cloning into 'sample'...
    gituser2@192.168.1.203's password:
    warning: You appear to have cloned an empty repository.
    

哈哈哈哈哈!

linux 下搭建自己的 git 服务器以及配置多用户相关推荐

  1. Windows平台下搭建自己的Git服务器

    Gitblit 是一个纯 Java 库用来管理.查看和处理 Git 资料库,相当于 Git 的 Java 管理工具. Gitblit 支持Linux操作系统,因此 Gitblit 需要java运行环境 ...

  2. linux下搭建简单的git服务器测试1

    这两天沉迷PHP web服务器开发不能自拔,但是php和html.js之类的程序要写一点看一点效果,我是放到Linux云主机上测试的,所以要在xshell上写代码,很麻烦. 于是想自己在云主机上搭建一 ...

  3. 在CentOS下搭建自己的Git服务器

    2019独角兽企业重金招聘Python工程师标准>>> 首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便.这步默认你会,就不讲了. 有了CentOS,那么 ...

  4. Linux下KickStart+PXE无人值守装机服务器的配置

    1.什么是KickStart KickStart是一种无人职守安装方式.KickStart的工作原理是通过记录典型的安装过程中所需人工干预填写的各种参数,并生成一个名为ks.cfg的文件:在其后的安装 ...

  5. kali系统搭建本地服务器,kali linux 下搭建git服务器

    参考:http://www.cnblogs.com/dee0912/p/5815267.html https://www.liaoxuefeng.com/wiki/001373951630592960 ...

  6. 在linux下搭建git环境,在linux下搭建git github开发环境

    在linux下搭建git github开发环境 github git linux 1.安装git sudo apt-getinstall git 2.Generating SSH keys 2.1.g ...

  7. 这可能是东半球最详细的Linux下搭建Jenkins服务器实现自动打包的教程(上)

    前言:作为开发者,我们都遇到过这样一个问题,项目在测试期的时候,测试总会找我们打各个环境的包,什么生产包.prd包.pre包,每次都是我们打完包再发给测试.可是打包是要时间的啊,项目小还好,项目大的话 ...

  8. Linux ENSP 搭建DHCP服务器并实现中继和Linux 下搭建DNS服务器(2个实验可跟做)

    文章目录 DHCP服务 了解DHCP服务 使用DHCP的好处 Linux 下搭建DNS服务器 实验环境 实验过程 修改DHCP配置文件 更改dns服务器名称 更改win10的IP地址 Linux &a ...

  9. 我的世界服务器linux加mod,在Linux下搭建带MOD 我的世界(Minecraft)服务器

    在Linux下搭建带MOD 我的世界(Minecraft)服务器 系统要求 官方服务器推荐配置要求如下: CPU:Intel Core-Based CPUs or AMD K8-Based CPUs ...

  10. linux搭建mcpe服务器_Ubuntu Linux下搭建Minecraft我的世界服务器

    总结一下在Ubuntu Linux下搭建Minecraft我的世界服务器的方法,其实非常简单直接. (1).把当前的软件都更新到最新 sudo apt-get update Minecraft服务器需 ...

最新文章

  1. 干货丨从起源到具体算法,这是一份适合所有人读的深度学习综述论文
  2. WebForm中关于DataGrid的20篇经典文章
  3. python 表格格式输出_利用python对excel中一列的时间数据更改格式操作
  4. 1.3 循环神经网络模型-深度学习第五课《序列模型》-Stanford吴恩达教授
  5. 160-PHP 文本替换函数str_replace(一)
  6. julia example_使用Julia中的Example的sign()函数
  7. Hive分区和桶的概念
  8. 2018年第41周-sparkSql搭建及配置
  9. 质量不同的球java编程_荐非常经典的java编程题全集-共50题(1-10)...
  10. .NET下为百度文本编辑器UEditor增加图片删除功能
  11. 比特币科普:区块链技术神奇在哪里?
  12. JavaScript 小技巧之数组合并
  13. 几个学习git的地方
  14. office哪个版本最好用?都有哪些版本
  15. 安装hustoj的一些心得及html的笔记
  16. 阿里云全球交付中心正式成立,打造一流的全球服务能力
  17. 报表解决方案Telerik Reporting发布R2 2019 SP1|支持MS Access
  18. week2-二分和二分搜索
  19. 计算机毕业设计_基于SSM的医院预约挂号系统设计与实现
  20. [conda] 利用conda安装本地包

热门文章

  1. 【源码】HashMap源码及线程非安全分析
  2. set.seed(7)什么意思
  3. bat(续五)-获取批处理文件所在路径
  4. matlab 按照某列以行为单位进行排序
  5. 《HTTP权威指南》– 6.代理
  6. Android笔记: 在Eclipse环境下使用Genymotion模拟器
  7. 自定义View调用onDraw方法
  8. ELM327 OBD to RS232 Interpreters
  9. Dinic PK Isap
  10. IIS6.0系统日志中出现此错误Timer_MinBytesPerSecond,Timer_ConnectionIdle