热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

(5)多人协作Git部分——学习笔记

克隆仓库到本地打开实验环境,以组员的身份克隆自己的work仓库到实验环境,由于之前已经设置了实验环境的SSH公钥到GitHub,所以我们
  1. 克隆仓库到本地

打开实验环境,以组员的身份克隆自己的 work 仓库到实验环境,由于之前已经设置了实验环境的 SSH 公钥到 GitHub,所以我们使用 git 开头的地址来克隆:
在这里插入图片描述
链接的结尾 .git 是不需要的:
在这里插入图片描述
2. 完成任务并推送到自己的仓库

现在我们要完成组长仓库的一个 issue,注意每个 issue 在创建后都会生成一个编号,我们首先完成 1 号 issue:
在这里插入图片描述
创建文件,添加到暂存区,提交,查看本地仓库分支状态:
在这里插入图片描述
在这里插入图片描述

注意在执行 commit 命令时,备注信息里有个 “fix #1”,这是必要的,当备注信息中含有此字样的 commit 出现在组长仓库,仓库中编号为 #1 的 issue 就会自动关闭。类似的字样还有 “fixes #xxx、fixed #xxx、closes #xxx、close #xxx、closed #xxx”,这些并不重要,选择字母最少的 fix 就可以了。当然偶尔忘记写这个字样也不要紧的,issue 可以手动关闭,甚至关掉的 issue 还能再开。

完成以上操作,组员的 GitHub 仓库会发生变化,新增一个版本号为 b374 的提交:
在这里插入图片描述
3. 提 PR & 检查合并 PR

接下来,怎么把修改从组员的仓库添加到组长的仓库呢?这就用到了 pull request 方法,简称 PR。这个词组比较费解,两个词都有动词属性,字面意思是 “拉,请求”,可以理解为这是一个名词性词组,意为 “允许被拉取的请求”,创建一个 PR 就是从甲分支向乙分支提一个请求,该请求中有一个或多个提交,对方觉得可以、没问题,就合并(merge) 这个请求,也就是把请求中所有提交的修改增加到乙分支上,整个过程简称 “提 PR”、“检查合并 PR”。提 PR 既可以在仓库内,也可以跨用户跨仓库。

好,现在我们从组员的 work 仓库 master 分支给组长的 work 仓库 master 分支提一个 PR:
在这里插入图片描述
如下图所示,仔细检查紫色框中的内容是否正确,再看绿色椭圆形框中的绿色字样 “Able to merge.”,说明这个 PR 中的修改跟目标分支没有冲突:
在这里插入图片描述
从上图还可得知一些信息:该 PR 里有 1 个提交,1 个文件改动,1 个贡献者。点击上图绿色按钮跳转到确认页面,再次点击下图绿色按钮即可完成本次 “提 PR” 工作:

在这里插入图片描述
完成后,页面自动跳转到组长的 work 仓库 PR 的合并页面:
在这里插入图片描述

该页面只有参与项目协作的成员有权限进入,当前 GitHub 的登录用户是组员,所以可见,且对这个仓库有完全的管理权限,除了删除仓库。当然了,检查合并 PR 的权限也是有的。重要的一点:提了 PR 之后,一定要求参与项目的其他成员来检查合并,不要自己来,尽管自己有权限。

上图中绿色按钮是个下拉按钮,合并 PR 的方法有三种,分别解释一下:

Create a merge commit :这种方式会在组长仓库的 master 分支上生成一个新的提交,且保留 PR 中的所有提交信息。这是一种常规操作,用得最多。

Squash and merge :压缩合并,它会把 PR 中的全部提交压缩成一个。此方法的优点就是让提交列表特别整洁。一个 PR 里有很多提交,每个提交都是很细小的改动,保留这些提交没什么意义,这种情况就使用此方法合并 PR。

Rebase and merge :这种方法不会生成新的提交,例如 PR 中有 6 个提交,用此方法合并后,组长仓库也会新增 6 个提交。注意,这些提交的版本号与组员的提交不同,此外完全一样。

现在切换到另一个登录组长账号的浏览器,打开合并 PR 的页面,用第一种方法合并:

在这里插入图片描述
这就是第一种方式合并的结果,生成了一个新的提交,这个提交里没有修改。因为样子不太美观,这是我最不喜欢用的方式。仔细看上图的 issue,变成了 1 个,也就是说在合并 PR 后,#1 issue 被关闭了。

以上就是一次完整的修改、提交、推送、提 PR、合并 PR 的过程。

需要注意的一点:从 A 向 B 提 PR 后,在 PR 合并或关闭前,A 上所有新增的提交都会出现在 PR 里!!!

  1. 同步主仓库

因为组长的 master 分支新增了一个空提交,所以需要让组员的仓库同步组长的仓库,使它们的提交版本一致。作为组员,要时刻保持自己的 master 分支与组长的一致,以避免在下次提 PR 时出现冲突,该操作叫做 “同步主仓库”,组长的仓库就是主仓库。

提 PR、合并 PR 只能在 GitHub 页面上操作。同步主仓库是要用 Git 操作的。现在回到实验环境中操作。首先,使用 remote 系列命令来增加一个关联主机,执行 git remote add [主机名] [主仓库的地址],注意,主仓库的地址使用 https 开头的:
在这里插入图片描述
如上图所示,主机名是随意定义的,只要不是 origin 就可以,因为自己的仓库地址对应的主机名是 origin,主仓库的主机名通常定义为 up 或 upstream,这个主机名其实就是一个变量,它的值就是仓库地址,例如 git push origin master 完全等于 git push git@github.com:Manchangdx/work master

如此说来,关联主仓库后也没什么变化嘛,确实如此,即使地址写错也不会报出来。现在可以使用前面课程介绍过的 fetch 命令来拉取主仓库的全部分支信息到本地仓库了,我有时使用这个命令看上一个命令是否有拼写错误:
在这里插入图片描述
在这里插入图片描述
如何同步主仓库哩?方法有二,一是执行 git pull --rebase up master ,此命令需联网,二是执行 git rebase up/master,此命令不联网,因为前面已经执行了 git fetch up 这个需要联网的命令,本地已经有了最新的主仓库 master 分支信息,所以可以这么操作。

总结一下:git pull --rebase = git fetch + git rebase。现在使用方法二来同步:
在这里插入图片描述
在这里插入图片描述
同步主仓库已完成。现在可以继续修改提交自己的 master 分支了。然后一并推送到自己的远程仓库。

以上是在自己 Fork 的仓库里进行修改的过程。还有一种常用的方式,就是不用 Fork,直接克隆组长的仓库到本地,然后各自创建自己的分支,在自己的分支上进行修改提交,最后从自己的分支向 master 分支提 PR。方式不同,原理一样。
参考:实验楼


推荐阅读
  • Day 5 20190120 老男孩python学习第5天 内容整理
    今天继续看MasteringPycharm的视频,一个半小时看git的教学视频:视频1小时44分钟,看了2个半小时以上https:www.youtube ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • kafkamanager(cmak)安装及使用
    1.软件下载kafka-manager工具目前改名为cmak,下载地址为:https:github.comyahooCMAKreleasestag3.0.0.5现在 ... [详细]
  • nvmw安装,用于控制node版本;
    之前一直使用的是nodev2.2.0版本,挺说新版本的node解决了npm安装插件产生文件夹结构过深的问题,所以就想更新试试;上网一看才发现,尼玛的node已经到了6.+版本了,好 ... [详细]
  • 下载安装并配置flutter
    1.去github上下载flutter安装包https:github.comflutterflutterreleasestag2.0.42.将安装包zip解压到你想安装Flut ... [详细]
  • 手机49kbps转换比特率256Kpbs{‘corpus_no’:‘7045177033217452815’,‘err_msg’:‘success.’,‘err_no’:0,‘re ... [详细]
  • 开发笔记:(源码开放) React + webpack3 多页面应用 及 常见问题解答
    本文由编程笔记#小编为大家整理,主要介绍了(源码开放)React+webpack3多页面应用及常见问题解答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 如何设计一个秒杀系统(各方面都写的很到位)
    1.Overview1.1并发读写秒杀要解决的主要问题是:并发读与并发写。并发读的优化理念是尽量减少用户到服务端来读数据,或者让他 ... [详细]
  • MyBatis缓存分为一级缓存和二级缓存一级缓存在SqlSession上二级缓存在SqlSessionFactory上如何配置一级缓存??默认开启&#x ... [详细]
  • k8s(十一)helm安装premetheus
    1prometheus基础知识1.1prometheus简介Prometheus是一套开源的系统监控报警框架。和Kubernetes类似,它也发源于Google的Borg体系,其原 ... [详细]
  • Github上73个超棒且可提高生产力的 NPM 包,高赞!
    来自:掘金,作者:火狼1https:juejin.impost6854573212890562573前言JS是前端的核心,但 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了在git中如何对指定的commit id打标签,并解决了忘记打标签的问题。通过查找历史提交的commit id,可以在任意时间点打上标签。同时,还介绍了git中的一些常用命令和操作。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
author-avatar
男人好好疼h爱你的女人吧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有