Gogs

​ 到目前为止,我们已经学会了如何在本机利用git进行文件版本管理,但是如果要想进行多人协作,我们就必须使用远程仓库。将本地仓库的数据同步到远程仓库,实现多人协作开发。

​ 目前比较热门的代码托管社区:GitHub,网址:https://gtihub.com ,提供了免费的远程git仓库功能。不过网速不是特别流畅。 在国内,有很多的公司使用oschina提供的git服务:码云, https://gitee.com ,当然,我们也可以自己来搭建远程仓库。目前学校服务器中搭建了一个git私服,其地址为:http://192.168.50.33:10080

搭建远程仓库服务

​ GitHub是世界最大的代码托管库,但是如果你想要设置私人仓库,是要收费的。而且速度不太好。因此一般公司都会自己搭建Git私服。 现在主流的私服架构有:GitLab、Gogs等

​ 开源中国的码云就是使用GitLab搭建的,我们学校的私服使用的是Gogs,搭建起来比GitLab要简单的多,所以我们使用Gogs来搭建。

安装mysql

gogs底层的管理需要以来数据库,可以是mysql,也可以是其他一些常用数据库,推荐mysql

略,以前学过

安装git

用命令:yum install -y git 安装

image-20230915101434800

image-20230915101438321

安装gogs

1) 创建git用户

adduser git

切换到git用户

su git

2) 下载gogs包并解压

可以到官网下载

image-20230915101454592

1
tar -zxvf gogs_0.11.86_linux_amd64.tar.gz  

解压后出现目录:

image-20230915101503838

3) 导入Sql数据

进入gogs目录。查看:

image-20230915101514617

要执行的脚本就在scripts目录中:

image-20230915101523253

执行命令:

1
2
cd scripts
mysql -uroot -p < mysql.sql

然后输入mysql密码即可

image-20230915101531793

执行完后,对新增一个名为gogs的数据库。

image-20230915101540244

4) 创建新的数据库用户

用root用户登入mysql

1
mysql -uroot -p

image-20230915101553732

然后执行以下命令创建gogs数据库用户

1
create user 'gogs'@'localhost' identified by 'gogs'; //第一个gogs是用户名,第二个gogs是密码

image-20230915101600674

1
grant all privileges on gogs.* to 'gogs'@'localhost';

image-20230915101609086

1
flush privileges;

image-20230915101620248

5) 运行gogs

退回到gogs根目录,运行脚本:

./gogs web

可以看到以下信息:

image-20230915101628631

启动成功,监听的是3000端口

gogs 后台运行:

1
$nohup ./gogs web & 

6) 访问管理页面

在浏览器中访问:http://192.168.154.133:3000

首次运行,会让我们进行一些设置:

数据库设置:

image-20230915101637558

基本设置:

image-20230915101648404

其它设置,可选,不设置的话需要注册新的用户信息

image-20230915101656905

完成后,熟悉的页面出现了:

image-20230915101704871

访问远程仓库

注册并登录

访问:http://192.168.50.33:10080

image-20230915101713472

大家自己注册并登录:

image-20230915101722937

创建新的仓库

在页面左侧,选择创建新的仓库

image-20230915101730480

填写仓库信息:

image-20230915101737843

仓库创建完毕,可以看到,如果我们要与远程仓库同步,这里支持两种不同的通信协议,sshhttp。当我们选中一种协议后,后面会出现对应的远程仓库地址

image-20230915101753168

具体用那种协议要看企业团队,一般用HTTP协议的比较多,因为简单。

如果处于安全一般会使用ssh协议。但是要使用SSH协议进行同步,你就必须生成SSH密钥,并添加到当前仓库的许可列表中!接下来了解下SSH协议。作为开发人员我们不需关注这个协议,重点是使用git工具进行代码的远程操作。

SSH协议

什么是ssh

​ SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,相对于HTTP协议更安全。

​ 使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、Pop、甚至为PPP提供一个安全的”通道”。

​ 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

​ 最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

创建SSH密钥

Git-bash中已经集成了ssh功能,所以我们只需要简单的命令,即可生成密钥:ssh-keygen -t rsa

一路回车向下走,不要输入任何内容即可!

image-20230915101806427

执行命令完成后,在window本地用户.ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥:

image-20230915101813384

添加SSH密钥到git私服

选择用户,个人设置:

image-20230915101823380

点击SSH密钥设置,并添加密钥:

image-20230915101830430

密钥的内容,就是刚刚生成的两个密钥中的公钥:id_rsa.pub,用文本编辑工具(EditPlus)打开,并且复制内容即可。

image-20230915101836194

将这段公钥添加到用户,这就说明,这台公钥的机器具备了访问这个git账号中的远程仓库的权限!因此一定要慎重添加。不能随意让别人操作你的仓库!!

推送远程仓库

通过控制面板,回到仓库页面,发现下面有一段帮助信息:

image-20230915101844415

关联远程仓库:

1
git remote add origin ssh://git@192.168.50.33:10022/fangqyou/hello-git.git

推送本地仓库到远程仓库的master分支:

1
git push -u origin master

需要注意的是:git remote add origin 后面紧跟的,其实是上面的仓库地址信息

执行命令,发现有提示信息:

image-20230915101852574

第一次推送,会有提示信息,我们输入yes:

image-20230915101859061

推送成功!此时登录远程仓库,刷新页面,可以看到数据已经推送,并且与本地仓库完全一致:

image-20230915101908052

从现在起,只要本地作了提交,就可以通过命令:

git push origin master

把本地master分支的最新修改推送至GitHub,现在,你就拥有了真正的分布式版本库!

克隆远程仓库

​ 现在,假设一个新的成员要加入我们的开发队伍,那他首先要做的第一件事情,一定是从远程仓库获取所有代码。此时就可以使用克隆动作。

克隆远程仓库:就是从远程把仓库复制一份到本地,克隆后会创建一个新的本地仓库。

我们随意找到一个目录D:\test\world:

image-20230915101916699

打开控制台,输入命令:git clone 远程仓库地址

远程仓库地址可以在仓库页看到:

image-20230915101922898

输入命令:

image-20230915101930512

查看目录:

image-20230915101935742

内容:

image-20230915101941760

查看状态:

image-20230915101947660

OK,你已经与远程仓库完全一致了,开始你的工作吧!

拉取远程仓库数据

​ 现在如果有人也向远程仓库推送了代码,那么当我们就需要拉取 远程仓库的最新代码到本地:

我们可以先手动修改远程仓库数据,模拟他人的提交:

image-20230915101954601

在本地拉取最新代码,使用git pull 命令

image-20230915102002217

查看readme文件:

image-20230915102011612

内容已经与远端保持一致。

总结

注意:

1) 如果要使用SSH协议与远程仓库同步,就必须先在本地生成公钥和私钥,然后将公钥添加到远程的SSH列表

2) 如果已经有本地仓库,并且想要与远程仓库关联,一般需要两步:

​ a) 通过git remote add origin + 远程仓库地址 进行关联

​ b) 通过git push -u origin master推送本地仓库修改到远程仓库

3) 如果没有本地仓库,先创建远程仓库,然后通过git clone + 远程仓库地址 进行克隆并创建本地仓库