利用Gogs(远程Git仓库)实现多人协作

0. 前言

利用Windows搭建私人远程Git仓库(基于Gogs)博客中已经介绍了Windows系统搭建私人远程仓库的具体过程。

在团队开发过程中,需要首先选择一台电脑作为服务器,根据上述步骤在该电脑(服务器)上搭建一个私人的远程仓库(类似于GitHub);团队当中其他人的电脑作为客户端(上述服务器和这些电脑处于同一局域网),可以向上述私人仓库推送,合并,下载,管理代码。

这样的好处就是公司的一些机密代码无需通过GitHub网站管理,避免了代码泄露。同时私人仓库一次部署,多人使用,其他人直接访问服务器加默认端口号就可以登录(具体过程下面会介绍),无需每个人再重新部署一次。

1. 多人协作初始化组织、仓库

为了阐述方便,(管理员)表示服务器的管理者,(开发人员)表示向服务器推送/下载代码的开发人员。

1.1 给团队每个人创建账户(管理员)

管理员登录管理员账号,点击右上角加号,分别选择 管理面板 -> 用户管理,点击创建新用户。

在这里插入图片描述
给你团队的每个人创建账户,必填项一定要填。

1.2 用户登录(开发人员)

首先在自己的浏览器地址栏中输入访问地址(比如:http://192.168.0.115:3000/,其中服务器端ip:192.168.0.115,服务器端端口号:3000),点击登录。

在这里插入图片描述
输入管理员为你创建的用户名及密码,点击登录。
在这里插入图片描述

1.3 创建组织,建立远程仓库(管理员)

管理员首先需要创建一个组织,并拉入共同协作开发人员。

  1. 点击组织中的 +,创建新组织,并为组织起一个名字,点击创建。

在这里插入图片描述
2. 创建好组织后,将协同开发人员拉入组织,即点击邀请他人加入:
在这里插入图片描述
这里我创立了两个测试用户zhangsan和lisi,将他俩拉入组织,如下图所示:

在这里插入图片描述
3. 回到第2步初始页面,点击创建新的仓库

在这里插入图片描述
在这里插入图片描述

  1. 创建之后,按照页面说明文档建立本地和远程仓库。如下图所示:

在这里插入图片描述
在这里插入图片描述
5. 点击右上角仓库设置 -> 管理协作者,添加协作者(这里我们把组织中的zhangsan和lisi加入其中作为协作者)

在这里插入图片描述
zhangsan或lisi登陆自己的账号之后,就可以看到自己可以参与协作的仓库
在这里插入图片描述

2. 多人协作具体过程

上面介绍了管理员创建本地仓库并且拉入协作者的具体过程,接下来介绍实际项目中团队每个人的具体管理代码过程,包括建立分支,推送,解决冲突等各种情况。

总的来说,多人协作过程如下(以lisi为例):

  • lisi切换至master分支,从远程pull下来最新的远程master代码
  • lisi切换至自己本地的分支,merge master,更新自己的分支
  • lisi修改本地文件内容,commit至自己的本地分支上,并推给远程分支
  • lisi登陆自己的gogs账号,申请自己的远程分支合并至远程master
  • 分支合并:
    • 若无问题,管理员会同意分支合并,若无冲突,会将远程分支合并至远程master
    • 若有冲突,管理员通知lisi,先才从远程master pull下来最新的代码,在本地分支上解决冲突,然后再push到远程分支,重新申请合并

2.1 从远程私人仓库clone仓库至本地仓库(开发人员)

首先,所有协作者(zhangsan、lisi)登陆自己的账号,将参与协作的仓库clone下来。

在这里插入图片描述

2.2 修改本地仓库文件中的内容,并推送到远程分支(开发人员)

以lisi电脑为例,我们随便在lisi的本地仓库中的README.txt文件中添加一些内容,保存。
在这里插入图片描述
我们在代码管理过程中,要始终保持master分支是最稳定的,没有问题的,所以我们在开发过程中需要建立一个分支,在分支上对代码进行操作,然后push到远程分支,具体过程如下:

在这里插入图片描述

2.3 申请远程分支合并至远程master(开发人员)

回到自己账户中,选择合并请求->创建合并请求
在这里插入图片描述
选择合并分支:

在这里插入图片描述
申请成功。

在这里插入图片描述

2.4 管理员同意合并请求(管理员)

在管理员账号上,点击合并请求,没有冲突就可以合并成功,如下图所示:
在这里插入图片描述
回到文件选项,可以看到刚才lisi的提交。
在这里插入图片描述

以上过程完成了lisi提交分支,合并远程master过程。


2.5 其他人员从远程更新自己本地代码过程(开发人员)

现在远程仓库的代码已经由lisi提交新的内容更新。此时,如果zhangsan希望协同开发,需要先将远程代码pull下来。

zhangsan首先切换到本地master分支,执行git pull,从远程master更新本地master。

在这里插入图片描述
重复上述lisi提交过程,zhangsan建立一个分支,修改README内容,提交至自己的分支,申请合并,管理员合并,上述过程省略。

此时远程仓库内容再次更新,lisi更新自己本地仓库内容。

在这里插入图片描述

2.6 解决合并冲突问题

上述过程显示了zhangsan和lisi协同开发的过程,当然上述过程是一种理想情况,两者交替开发,但是实际项目中如果两个人同时修改一份文件,同时合并分支,会造成先申请合并分支的人合并成功,后申请的人会因为冲突问题申请失败。

上述过程完成后,zhangsan和lisi本地仓库中的内容完全一致。

假设zhangsan和lisi同时修改README文件中的内容,同时申请合并分支,如下图所示:
在这里插入图片描述
lisi先提交,所以先同意lisi的合并请求,成功合并没有问题;再解决zhangsan的合并请求,出现冲突,无法合并。
在这里插入图片描述
这时候需要在zhangsan电脑上先切换到本地master上,再将当前最新远程master上的代码pull下来,然后在本地解决冲突,过程如下:

在这里插入图片描述
打开README.txt,发现冲突:
(HEAD处是zhangsan的代码,master是远程master分支上的代码,需要手动解决冲突后提交)
在这里插入图片描述
根据需要修改上方代码,再push到远程分支:
[图片]
这时,管理员账号上的合并请求又恢复正常了,点击合并请求,这样合并就成功了。
在这里插入图片描述
lisi更新自己本地代码,再更新远程分支。

2.7 分支保护(管理员)

如果我们希望远程分支只能自己推送,而其他人不能向该分支推送,需要手动管理。

点击仓库设置->管理分支->保护分支

在这里插入图片描述
可以针对各个分支设置响应的权限。

同样,对协作者的权限也可以做出相应的修改和调整。
在这里插入图片描述

3. 总结

多人协作过程如下(以lisi为例):

  • lisi切换至master分支,从远程pull下来最新的远程master代码
  • lisi切换至自己本地的分支,merge master,更新自己的分支
  • lisi修改本地文件内容,commit至自己的本地分支上,并推给远程分支
  • lisi登陆自己的gogs账号,申请自己的远程分支合并至远程master
  • 分支合并:
    • 若无问题,管理员会同意分支合并,若无冲突,会将远程分支合并至远程master
    • 若有冲突,管理员通知lisi,先从远程master pull下来最新的代码至本地master,从本地分支merge本地master时存在冲突,需要在本地分支上解决冲突;然后再push到远程分支,重新申请合并

补充:多人协作常用的git指令

git init
git add .
git commit -m 'commit message'
git status 查看状态
git push origin master 推送远程master
git push origin <branch-name> 推送远程分支
git pull 从远程仓库下拉
git checkout -b <branch-name> 建立分支并转到该分支上进行开发
git checkout master 转换到本地master上
git merge <branch-name> 合并分支内容

猜你喜欢

转载自blog.csdn.net/xiecheng1995/article/details/106377973
今日推荐