Linux下的git服务器搭建(一)

目录

  • 前言
  • gitlab
    • gitlab介绍
    • gitlab安装
  • git
    • git的安装部署
    • 添加ssh免密登录
  • git相关知识
  • 总结

前言

最近又好久没更新了,放了个小长假,回来一直忙,也没空写;最近抽出两个下午研究了一下git的有关原理和git服务器的搭建。正好git常用于代码版本控制,更新回退之类的操作也很常用,但期间还有一些原理不太清楚,正好在研究搭建服务器的时候顺便学习了。
内容比较多,分了两期,第一期是gitlab和git的安装搭建和一些git的相关知识;第二期是gitblit的安装搭建和gitblit的常用功能介绍(尤其是用户权限对项目权限的介绍),接触git尚浅,如有错误,还请指正。其中安装gitlab中途放弃了,原因是gitlab作为一个集成度较高的项目,开的服务并不只有一个git,连邮件服务都有所设计,官方文档中的推荐内存是4g,而且安装包的下载速度的大小是在是让人不敢恭维(要下2h),对于我这只用于个人的git服务完全没有必要,于是乎就找来了一点官方的安装步骤和知乎的一个安装教程。

gitlab

gitlab介绍

gitlab是一个开源的git仓库管理软件,并提供web界面,方便管理git仓库。和github很相似,不过github暂时没有开源版本,项目必须托管到github官方网站,不能本地部署。很多公司考虑到安全费用等因素,搭建自己的gitlab服务器。

gitlab安装

官方的地址:https://about.gitlab.com/install/
找到对应linux的官方安装步骤:

  1. 安装并配置必要的依赖
    sudo apt-get update
    sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
    (可选)接下来,安装 Postfix 以发送通知电子邮件。如果您想使用其他解决方案发送电子邮件,请跳过此步骤并 在安装 GitLab 后配置外部 SMTP 服务器。
    sudo apt-get install -y postfix
    在 Postfix 安装过程中,可能会出现一个配置屏幕。选择“Internet 站点”并按 Enter。将您服务器的外部 DNS 用于“邮件名称”,然后按 Enter。如果出现其他屏幕,请继续按 Enter 接受默认值。

  2. 添加GitLab包仓库并安装包
    添加 GitLab 包存储库。
    curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
    Linux下的git服务器搭建(一)_第1张图片
    接下来,安装 GitLab 包。确保您已正确设置 DNS,并更改https://gitlab.example.com为您要访问 GitLab 实例的 URL。安装将在该 URL 上自动配置和启动 GitLab。
    Linux下的git服务器搭建(一)_第2张图片
    (what’s up!要下俩小时,溜了溜了)
    对于https://URL,GitLab 将使用 Let’s Encrypt自动请求证书,这需要入站 HTTP 访问和有效的主机名。您也可以使用自己的证书或仅使用http://(不带s)。
    如果您想为初始管理员用户 ( root)指定自定义密码,请查看文档。如果未指定密码,将自动生成随机密码。
    sudo EXTERNAL_URL="https://gitlab.example.com" apt-get install gitlab-ee

  3. 浏览到主机名并登录
    除非您在安装过程中提供了自定义密码,否则将随机生成一个密码并在/etc/gitlab/initial_root_password. 使用此密码和用户名root登录。

  4. 剩下的可以去看这个链接

git

Git是目前世界上最先进的分布式版本控制系统。

SVN与Git的最主要的区别?

Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。

git的安装部署

  1. 服务器安装git
    可以从git官网下载安装包解压,在本文中,我们将使用更简单的方法,直接使用命令(记得先更新一下apt-get,如果太慢就换个国内镜像):
    sudo apt-get install git-core
    在这里插入图片描述

  2. 用户端安装git(这里的用户端用的是Windows)
    这是官网地址:https://git-for-windows.github.io/,下载可能要fanqiang
    分享一个较新的版本:
    链接:https://pan.baidu.com/s/1oSXcSb-Bkb03rSW3wYdW4Q
    提取码:12h1
    安装过程十分简单,C盘够用的话全点确定和下一步就安装好了,安装成功后右键会多这两个东西
    在这里插入图片描述

  3. 服务器端创建一个专门的 git 用户,用来管理 Git 服务,并为 git 用户设置密码
    进入sudo权限后使用命令:
    useradd git
    passwd git
    Linux下的git服务器搭建(一)_第3张图片

  4. 服务器端创建 Git 仓库
    设置 /home/data/git/gittest.git 为 Git 仓库
    mkdir -p data/git/gittest.git
    git init --bare data/git/gittest.git
    cd data/git/
    然后把 Git 仓库的 owner 修改为 git
    chown -R git:git gittest.git/
    Linux下的git服务器搭建(一)_第4张图片

  5. 用户端连接服务器端git
    确保用户端能ping通的情况下,新建一个文件夹,鼠标右击选择git bash选项
    然后输入以下命令,就可以把项目拉过来了,文件夹下回有一个.git配置文件,说明连接成功
    git clone git@地址:/home/data/gittest.git
    如果SSH用的不是默认的22端口,则需要使用以下的命令:
    git clone ssh://git@地址:端口号/home/data/gittest.git
    输入git的密码
    Linux下的git服务器搭建(一)_第5张图片
    第一次连接会出现warning,不用理会

  6. 使用编译器直接连接git服务(可选)
    目前大部分的编译器都是支持git的,比如说vs,idea,webstorm,eclipse 等等,我这里拿vs2019举个例子,其他的可以百度相关教程。
    打开编译器找到克隆库的选项,输入URL,定位到你的gittest.git,因为是建的是本地网络的库,所以填http不带s
    Linux下的git服务器搭建(一)_第6张图片
    然后建立连接后,编译器会自动拉取当前库,然后把根据.git文件配置好(可以修改当前或者本地提交的名字和邮箱),然后就可以使用常用的update,commit和pull了。
    Linux下的git服务器搭建(一)_第7张图片

添加ssh免密登录

无论更新还是上传,时不时弹出的选择输入密码,肯定很难忍受啊
Linux下的git服务器搭建(一)_第8张图片

  1. 创建RSA秘钥
    输入命令
    ssh-keygen -t rsa -C "[email protected]"
    如果提示命令找不到,是因为没把git添加到环境变量里
    在这里插入图片描述
    如果是默认安装的话,ssh-keygen在C:\Program Files\Git\usr\bin下
    成功后, C:\Users\用户名.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub

    id_rsa 是私钥

    id_rsa.pub 是公钥
    在这里插入图片描述

  2. 服务器端 Git 打开 RSA 认证
    进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:

	RSAAuthentication yes
	PubkeyAuthentication yes
	AuthorizedKeysFile .ssh/authorized_keys

发现RSAAuthentication 怎么也找不到,查阅相关资料发现,已经被废弃,是在将PubkeyAuthentication 打开后,默认打开的。
详细请见https://www.cnblogs.com/Leroscox/p/9627809.html

  1. 重启ssh服务:
    systemctl restart sshd.service

  2. 创建.ssh目录
    由 AuthorizedKeysFile 得知公钥的存放路径是 .ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 git,所以实际存放公钥的路径是 /home/git/.ssh/authorized_keys

    在 /home/git/ 下创建目录 .ssh
    mkdir .ssh
    然后把 .ssh 文件夹的 owner 修改为 git
    chown -R git:git .ssh

  3. 将客户端公钥导入服务器端 /home/git/.ssh/authorized_keys 文件
    ssh git@ip地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    需要输入服务器端 git 用户的密码,如果这步出问题,八成是路径问题,详细检查一下,也可以适当修改命令,是在不行直接copy过去。
    在这里插入图片描述
    回到服务器端,查看 .ssh 下是否存在 authorized_keys 文件:
    Linux下的git服务器搭建(一)_第9张图片
    到/home/git目录修改 .ssh 目录的权限为 700
    到/home/git/.ssh目录修改 .ssh/authorized_keys 文件的权限为 600
    chmod 700 .ssh
    chmod 600 authorized_keys
    这一步很重要,为的是防止你本地修改服务器的authorized_keys

  4. 本地下拉代码
    拉代码后,发现此时无论是更新还是提交都不需要输入密码了,说明已经成功

git相关知识

常用命令:https://blog.csdn.net/dengsilinming/article/details/8000622
工作原理:https://www.sohu.com/a/115137833_494937

一般情况下,使用git提交代码,先update,再讲本地修改commit,最后pull到remote。回退代码的话,编译器可能提供复杂回退和简单回退(保留不保留本地修改的区别),不搞事情一般不会出大问题,出问题了可以删掉项目,重新构建一下(/滑稽)。

安装参考:https://www.cnblogs.com/dee0912/p/5815267.html,博客比较旧了,但大部分依旧能用,坑比较少。

总结

gitlab没怎么用过,感觉更适合企业使用,集成较多;git的话更加轻量级比较适合个人使用,版本控制完全够用,权限控制的比较迷,也可能是我用的少了。。

你可能感兴趣的:(git,服务器,linux)