前言
最近又好久没更新了,放了个小长假,回来一直忙,也没空写;最近抽出两个下午研究了一下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的官方安装步骤:
-
安装并配置必要的依赖
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 接受默认值。 -
添加GitLab包仓库并安装包
添加 GitLab 包存储库。
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
接下来,安装 GitLab 包。确保您已正确设置 DNS,并更改https://gitlab.example.com为您要访问 GitLab 实例的 URL。安装将在该 URL 上自动配置和启动 GitLab。
(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
-
浏览到主机名并登录
除非您在安装过程中提供了自定义密码,否则将随机生成一个密码并在/etc/gitlab/initial_root_password. 使用此密码和用户名root登录。 -
剩下的可以去看这个链接
git
Git是目前世界上最先进的分布式版本控制系统。
SVN与Git的最主要的区别?
Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,如果在局域网还可以,带宽够大,速度够快,如果在互联网下,如果网速慢的话,就纳闷了。
git的安装部署
-
服务器安装git
可以从git官网下载安装包解压,在本文中,我们将使用更简单的方法,直接使用命令(记得先更新一下apt-get,如果太慢就换个国内镜像):
sudo apt-get install git-core
-
用户端安装git(这里的用户端用的是Windows)
这是官网地址:https://git-for-windows.github.io/,下载可能要fanqiang
分享一个较新的版本:
链接:https://pan.baidu.com/s/1oSXcSb-Bkb03rSW3wYdW4Q
提取码:12h1
安装过程十分简单,C盘够用的话全点确定和下一步就安装好了,安装成功后右键会多这两个东西
-
服务器端创建一个专门的 git 用户,用来管理 Git 服务,并为 git 用户设置密码
进入sudo权限后使用命令:
useradd git
passwd git
-
服务器端创建 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/
-
用户端连接服务器端git
确保用户端能ping通的情况下,新建一个文件夹,鼠标右击选择git bash选项
然后输入以下命令,就可以把项目拉过来了,文件夹下回有一个.git配置文件,说明连接成功
git clone git@地址:/home/data/gittest.git
如果SSH用的不是默认的22端口,则需要使用以下的命令:
git clone ssh://git@地址:端口号/home/data/gittest.git
输入git的密码
第一次连接会出现warning,不用理会 -
使用编译器直接连接git服务(可选)
目前大部分的编译器都是支持git的,比如说vs,idea,webstorm,eclipse 等等,我这里拿vs2019举个例子,其他的可以百度相关教程。
打开编译器找到克隆库的选项,输入URL,定位到你的gittest.git,因为是建的是本地网络的库,所以填http不带s
然后建立连接后,编译器会自动拉取当前库,然后把根据.git文件配置好(可以修改当前或者本地提交的名字和邮箱),然后就可以使用常用的update,commit和pull了。
添加ssh免密登录
无论更新还是上传,时不时弹出的选择输入密码,肯定很难忍受啊
-
创建RSA秘钥
输入命令
ssh-keygen -t rsa -C "472323087@qq.com"
如果提示命令找不到,是因为没把git添加到环境变量里
如果是默认安装的话,ssh-keygen在C:\Program Files\Git\usr\bin下
成功后, C:\Users\用户名.ssh 下会多出两个文件 id_rsa 和 id_rsa.pubid_rsa 是私钥
id_rsa.pub 是公钥
-
服务器端 Git 打开 RSA 认证
进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
发现RSAAuthentication 怎么也找不到,查阅相关资料发现,已经被废弃,是在将PubkeyAuthentication 打开后,默认打开的。
详细请见https://www.cnblogs.com/Leroscox/p/9627809.html
-
重启ssh服务:
systemctl restart sshd.service
-
创建.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
-
将客户端公钥导入服务器端 /home/git/.ssh/authorized_keys 文件
ssh git@ip地址 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
需要输入服务器端 git 用户的密码,如果这步出问题,八成是路径问题,详细检查一下,也可以适当修改命令,是在不行直接copy过去。
回到服务器端,查看 .ssh 下是否存在 authorized_keys 文件:
到/home/git目录修改 .ssh 目录的权限为 700
到/home/git/.ssh目录修改 .ssh/authorized_keys 文件的权限为 600
chmod 700 .ssh
chmod 600 authorized_keys
这一步很重要,为的是防止你本地修改服务器的authorized_keys -
本地下拉代码
拉代码后,发现此时无论是更新还是提交都不需要输入密码了,说明已经成功
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的话更加轻量级比较适合个人使用,版本控制完全够用,权限控制的比较迷,也可能是我用的少了。。