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

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 -al
	total 0
	drwxr-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 gituser1
	Password: 
	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 test
      1 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 directory
     fatal: 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.
    

哈哈哈哈哈!😄😄😄😄😄

  1. 修改禁止 git 用户登录的方法
    sudo vim /etc/passwd
    如下,看到 git、gituser 和没有修改的 gituser2 的差别!
    在这里插入图片描述

  2. /bin/bash 修改为 /usr/bin/git-shell

找到	
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
		
gituser1 同样处理

最终结果如下:

在这里插入图片描述

  1. 再次试试
    $ git clone gituser1@192.168.1.203:/home/gitrepo/sample.git/

    Cloning into 'sample'...
    gituser1@192.168.1.203's password: 
    Could not chdir to home directory /home/gituser1: No such file or directory
    warning: You appear to have cloned an empty repository.
    

    我靠!什么时候把 gituser1 的 home 目录删除了

    $ sudo mkdir gituser1
    $ sudo chown -R gituser1:gituser1 gituser1

    加上 gituser1 的 home 之后,再来试试?终于 ok 了 !

  2. 后来还遇到以下错误

错误一:

$ git push
gituser2@192.168.1.203's password: 
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 210 bytes | 210.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
error: remote unpack failed: unable to create temporary object directory
To 192.168.1.203:/home/gitrepo/sample.git/
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to 'gituser2@192.168.1.203:/home/gitrepo/sample.git/'

错误二:

	Total 3 (delta 0), reused 0 (delta 0)
	remote: error: refusing to update checked out branch: refs/heads/master
	remote: error: By default, updating the current branch in a non-bare repository
	remote: is denied, because it will make the index and work tree inconsistent
	remote: with what you pushed, and will require 'git reset --hard' to match
	remote: the work tree to HEAD.
	remote: 
	remote: You can set the 'receive.denyCurrentBranch' configuration variable
	remote: to 'ignore' or 'warn' in the remote repository to allow pushing into
	remote: its current branch; however, this is not recommended unless you
	remote: arranged to update its work tree to match what you pushed in some
	remote: other way.
	remote: 
	remote: To squelch this message and still keep the default behaviour, set
	remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
	To 192.168.1.203:/home/gitrepo/sample.git/
	 ! [remote rejected] master -> master (branch is currently checked out)
	error: failed to push some refs to 'gituser2@192.168.1.203:/home/gitrepo/sample.git/'

主要是权限设置问题
最后,实在没有办法,服务端重新初始化仓库目录
其实差不多就是从头再来一次

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Gogs是一款极易搭建的自助Git服务。Gogs的目标是打造一个最简单、最快速和最轻松的方式搭建自助Git服务。使用Go语言开发使得Gogs能够通过独立的二进制分发,并且支持Go语言支持的所有平台,包括Linux、MacOSX、Windows以及ARM平台。 Gogs功能特性: 支持活动时间线 支持SSH以及HTTP/HTTPS协议 支持SMTP、LDAP和反向代理的用户认证 支持反向代理子路径 支持用户、组织和仓库管理系统 支持添加和删除仓库协作者 支持仓库和组织级别Web钩子(包括Slack集成) 支持仓库Git钩子和部署密钥 支持仓库工单(Issue)、合并请求(Pull Request)、Wiki以及保护分支 支持迁移和镜像仓库以及它的Wiki 支持在线编辑仓库文件和Wiki 支持自定义源的Gravatar和Federated Avatar 支持Jupyter Notebook 支持邮件服务 支持后台管理面板 支持MySQL、PostgreSQL、SQLite3、MSSQL和TiDB(实验性支持)数据库 支持多语言本地化(22种语言) 系统要求: 最低的系统硬件要求为一个廉价的树莓派 如果用于团队项目,建议使用2核CPU及1GB内存 浏览器支持: 请根据Semantic UI查看具体支持的浏览器版本。 官方支持的最小UI尺寸为1024*768,UI不一定会在更小尺寸的设备上被破坏,但我们无法保证且不会修复。 安装部署: 在安装Gogs之前,您需要先安装基本环境。 然后,您可以通过以下5种方式来安装Gogs: 二进制安装 源码安装 包管理安装 采用Docker部署 通过Vagrant安装
### 回答1: 要搭建一个私有的 Git 服务器,基本步骤如下: 1. 安装 Git:在 Linux 服务器上执行命令 sudo apt-get install git 即可安装 Git。 2. 创建 Git 用户:执行命令 sudo adduser git 创建用户名为 git 的新用户。 3. 初始化 Git 仓库:在 git 用户的 home 目录下创建存放 Git 仓库的目录,并在此目录下执行 git init --bare <仓库名>.git 命令来创建一个裸仓库。其中,<仓库名> 可以自己定义。 4. 配置 SSH:在 Git 用户的 home 目录下,创建 .ssh 目录并将 SSH 公钥文件 id_rsa.pub 添加到 authorized_keys 文件中。这样就可以使用 SSH 协议来访问 Git 服务。 5. 设置访问权限:在 Git 仓库所在的目录下,执行命令 chown -R git:git <仓库名>.git 将目录的所有权赋予 git 用户,并执行命令 chmod -R 755 <仓库名>.git 修改权限。 6. 打开端口:如果使用 SSH 协议访问 Git 服务,则需要打开服务器端口。默认情况下,SSH 协议使用的端口为 22。 7. 测试:在客户端使用 Git 工具测试访问 Git 服务是否正常工作。 需要注意的是,搭建私有 Git 服务器需要具备一定的 LinuxGit 知识,建议在了解清楚操作流程和安全风险后再进行相关配置。 ### 回答2: 在Linux系统中,可以通过搭建私有Git服务器来进行代码的版本控制和团队协作。下面是一些搭建私有Git服务器的具体步骤和注意事项: 1. 安装Git 首先需要在Linux系统中安装Git。可以通过命令行输入sudo apt-get install git来安装Git。 2. 创建Git用户 为了保证数据的安全,最好创建一个专门的Git用户来管理Git服务器的安全。可以通过命令sudo adduser git来创建Git用户,并设置密码。 3. 初始化Git仓库 在Git用户下,通过命令行输入sudo mkdir /git,创建一个文件夹用于存放Git仓库,可以通过sudo chown git:git /git来给Git用户设定相应的权限。接下来,在/git文件夹下创建具体的Git仓库,可以通过命令sudo git init --bare /git/repo.git来创建一个名为repo.gitGit仓库。 4. 配置Git用户 为了保证Git服务器的安全,需要为Git用户配置SSH密钥。可以通过命令行输入sudo su git,然后通过ssh-keygen来生成相应的SSH公私钥,将公钥添加到到~/.ssh/authorized_keys文件中。这样,在使用Git客户端时,就可以使用SSH私钥来访问Git服务器了。 5. 完成 搭建私有Git服务器的过程非常简单,只需要几个简单的步骤就可以完成。最后,在Git客户端中,可以通过命令git remote add origin git@服务器IP地址:/git/repo.git来在Git客户端中添加一个指向Git服务器的远程仓库,然后,就可以使用Git工具进行版本管理和团队协作了。 需要注意的是,在搭建私有Git服务器时,需要考虑到数据的安全和权限的设置,避免不必要的数据丢失和权限泄露。同时,也需要注重Git客户端的配置和安全,避免恶意攻击和数据泄露。 ### 回答3: 搭建私有Git服务器是非常有必要的,特别是对于一些敏感的代码或是重要的开发项目。如果您想要搭建自己的Git服务器,那么Linux系统是您最佳的选择,因为它是开源的、免费的,而且以稳定和安全而著称。下面是一个简单介绍如何在Linux平台上搭建Git服务器的步骤。 第一步,安装Git。在Linux系统中,您可以使用Package Manager(包管理器)来安装Git。例如,在Debian和Ubuntu上,您可以使用以下命令安装Git: sudo apt-get install git-core 在安装完成后,您可以通过输入以下命令来检查Git是否安装成功:git --version 第二步,创建Git用户。在Linux系统中,您需要为Git服务创建一个专门的用户。首先,您需要使用以下命令来创建一个名为git用户: sudo adduser git 接下来,您需要登录到git用户: sudo su git 然后创建一个名为.gitolite的目录: mkdir .gitolite cd .gitolite 接着,在该目录下执行以下命令以克隆Gitolite代码库: git clone git://github.com/sitaramc/gitolite 第三步,安装Gitolite。运行以下命令以安装Gitolite: gitolite/install -symlink 这将在/home/git/bin目录下安装Git服务,并创建一个.gitolite.rc配置文件。 第四步,管理Git仓库。您可以将Git仓库放到/home/git/repositories目录下,例如在/home/git/repositories下创建一个名为test.gitGit仓库: git init --bare /home/git/repositories/test.git 然后,您可以将Git仓库命名为任何您想要的名称。 第五步,配置Gitolite。在git用户的主目录下,创建一个名为.gitolite.rc的文件,其中指定您的Git仓库和访问权限等。 使用以下命令来添加一个新的协作者: git clone git@localhost:gitolite-admin.git cd gitolite-admin 编辑conf/gitolite.conf文件以添加新用户及其权限: repo test RW+ = user1 RW = user2 git commit -m "Added users and their permissions" git push origin master 第六步,测试Git服务器。使用以下命令来检查您的Git服务是否运行正常: ssh git@localhost info 现在,您就成功地在Linux系统中搭建了自己的Git服务器。如果您想要添加更多的Git仓库,您可以重复以上步骤即可。有了一个私有的Git服务器,您就可以安全地管理您的代码库了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈虎123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值