原理解析

svn有服务端和客服端,服务端开启端口监听,后台运行.但git是一个分布式版本控制器,所以git没有服务端和客户端之分.也就是说git服务端不会监听任何端口,也不会后台运行.

git服务端搭建和客户端搭建没什么区别.使用的是linux带的ssh进行连接和linux文件权限控制进行管理.

设计

首先给定一个目录,该目录下可以创建各种git仓库.该目录归git用户组管理.以后所有需要连接git服务端的用户全放到git用户组下面.

具体实施

开始之前请先安装git,如果不知道怎么安装可以看我这篇文章Linux安装git

  • 创建用户组和存储仓库的文件夹

    我们创建一个git用户组,再创建/home/git目录作为我们git总仓库,以后要添加仓库就在这里添加

    groupadd git mkdir /home/git

  • 创建一个测试用户,给该用户相应权限

    首先通过which git-shell获取服务端git的shell地址,再创建用户,我的git-shell在/usr/local/git/bin/git-shell.

    useradd -g git -s /usr/local/git/bin/git-shell user01 #添加一个用户 passwd user01 #修改用户密码

上面参数我解释下:-g指定用户属于哪个用户组,-s指定用户登陆时使用的shell(每个linux用户登陆后都会被赋予一个shell,用来和linux内核进行交流.我们使用git的shell就能实现该用户只能使用git命令)

  • 使用git初始化一个没有工作区的仓库

    一个git仓库分为工作区和版本控制区,没有工作区就不能在服务端对git仓库进行文件的操作,只能在本地进行操作让服务端进行记录.--bare就是创建裸仓库

    mkdir /home/git/warehouse01.git git init --bare /home/git/warehouse01.git

  • 把创建好的仓库权限赋值给git组

    这个大家注意一下,以后每次创建一个新的仓库,一定要执行下面两个命令,否则git用户组没有权限访问新建的仓库

    chgrp -R git /home/git/<仓库名> chmod -R 775 /home/git/<仓库名>

千万不要偷懒使用, 因为ssh免密登陆需要保证/home/git/.ssh/authorized_k eys的权限是644, 否则不能免密登陆

chgrp -R git /home/git
chmod -R 775 /home/git

测试

根据上面几步我们就能通过user01远程连接git服务端,并进行git相关操作

  • 测试本地从服务端拉取服务端的warehouse01.git

    git clone user01@qiud.top:/home/git/warehouse01.git

上面这个命令我说下,qiud.top是我自己买的域名,和我的服务器ip绑定了,这个位置你有绑定ip的域名可以填域名,没有就填ip.执行上面命令会默认连接22号端口.连接成功后会克隆/home/git/warehouse01.git这个位置的文件夹

测试成功!结果如下: 20200325132955-2021-12-29-16-15-42

  • 测试把本地git仓库关联到远程服务端仓库

    • 添加一个远程仓库并赋予权限

    我们来复习一下怎么添加远程仓库

    mkdir /home/git/warehouse02.git
    cd /home/git/warehouse02.git
    git init -bare
    chgrp -R git /home/git
    chmod -R 775 /home/git
    
    • 本地创建一个git仓库,并写一个文件

      我在d:\git_house下面创建个仓库local_wh_02,并且新建了a.txt文件,添加了aaa作为内容

      mkdir local_wh_02 cd local_wh_02 git init echo 'aaa' > /git_house/local_wh_02/a.txt git add . git commit . -m'aaa'

    • 把本地仓库和远程warehouse02.git关联,并把本地仓库中内容推送给远程仓库

      git remote add server_wh_02 user01@qiud.top:/home/git/warehouse02.git git push -u server_wh_02 master

    顺便说下git push -u server_wh_02 master-u,这个表示本地仓库该仓库与远程仓库server_wh_02建立了连接关系,以后可以直接执行git push等命令,不需要再指明远程仓库地址

    执行成功! 20200325150003-2021-12-29-16-16-03


优化

其实根据以上步骤已经可以正常使用了,不用依赖github, 但是每次远程连接的时候都需要输入密码, 这样很麻烦, 所以我们使用公匙密匙进行无密码登陆.

创建公匙和密匙(已经有的同学可以掠过)

我的公匙保存位置如下图,你们的也差不多

20200325152125-2021-12-29-16-16-43

配置linux服务器的公匙认证

  1. 修改sshd的配置文件

    vi /etc/ssh/sshd_config

20200326120900-2021-12-29-16-16-59

特别说明下公匙存放的位置,是哪个用户登陆的,前面会自动加上家目录.例如:user01登陆,真正的路径是/home/user01/.ssh/authorized_keys 2. 根据公匙存放的位置创建目录

mkdir /home/user01/.ssh
  1. 把本地电脑公匙的内容复制到服务器端

    scp 'C:/Users/球童/.ssh/id_rsa.pub' root@qiud.top:/home/user01/.ssh/authorized_keys

这个地方要注意以下,因为user01的只能使用git,所以用ssh-copy-id是无效的,只能通过root账户把公匙复制到/home/user01/.ssh/authorized_keys 4. 测试

git push
THE END
开启精彩搜索

历史搜索

用户名或邮箱
密码
用户名
密码
重复密码
邮箱
注册
找回密码
注册 登录
邮箱
邮箱验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

新增

新增