0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

采用这六个 Git 协作策略,让嵌入式团队工作更高效

如意 来源:Linux中国 作者:Ravi Chandran 2020-09-17 11:46 次阅读

采用这些 Git 协作策略,让团队工作更高效。

Git 非常有助于小团队管理他们的软件开发进度,但有些方法能让你变得更高效。我发现了许多有助于我的团队的最佳实践,尤其是当不同 Git 水平的新人加入时。

在你的团队中正式确立 Git 约定

每个人都应当遵循对于分支命名、标记和编码的规范。每个组织都有自己的规范或者最佳实践,并且很多建议都可以从网上免费获取,而重要的是尽早选择合适的规范并在团队中遵循。

同时,不同的团队成员的 Git 水平参差不齐。你需要创建并维护一组符合团队规范的基础指令,用于执行通用的 Git 操作。

正确地合并变更

每个团队成员都需要在一个单独的功能分支上开发。但即使是使用了单独的分支,每个人也会修改一些共同的文件。当把更改合并回 master 分支时,合并通常无法自动进行。可能需要手动解决不同的人对同一文件不同变更的冲突。这就是你必须学会如何处理 Git 合并的原因。

现代编辑器具有协助解决 Git 合并冲突的功能。它们对同一文件的每个部分提供了合并的各种选择,例如,是否保留你的更改,或者是保留另一分支的更改,亦或者是全部保留。如果你的编辑器不支持这些功能,那么可能是时候换一个代码编辑器了。

经常变基你的功能分支

当你持续地开发你的功能分支时,请经常对它做变基rebase:rebase master。这意味着要经常执行以下步骤:

采用这六个 Git 协作策略,让嵌入式团队工作更高效

这些步骤会在你的功能分支上重写历史(这并不是件坏事)。首先,它会使你的功能分支获得 master 分支上当前的所有更新。其次,你在功能分支上的所有提交都会在该分支历史的顶部重写,因此它们会顺序地出现在日志中。你可能需要一路解决遇到的合并冲突,这也许是个挑战。但是,这是解决冲突最好的时机,因为它只影响你的功能分支。

在解决完所有冲突并进行回归测试后,如果你准备好将功能分支合并回 master,那么就可以在再次执行上述的变基步骤几次后进行合并:

采用这六个 Git 协作策略,让嵌入式团队工作更高效

在此期间,如果其他人也将和你有冲突的更改推送到 master,那么 Git 合并将再次发生冲突。你需要解决它们并重新进行回归测试。

还有一些其他的合并哲学(例如,只使用合并而不使用变基以防止重写历史),其中一些甚至可能更简单易用。但是,我发现上述方法是一个干净可靠的策略。提交历史日志将以有意义的功能序列进行排列。

如果使用“纯合并”策略(上面所说的,不进行定期的变基),那么 master 分支的历史将穿插着所有同时开发的功能的提交。这样混乱的历史很难回顾。确切的提交时间通常并不是那么重要。最好是有一个易于查看的历史日志。

在合并前压扁提交

当你在功能分支上开发时,即使再小的修改也可以作为一个提交。但是,如果每个功能分支都要产生五十个提交,那么随着不断地增添新功能,master 分支的提交数终将无谓地膨胀。通常来说,每个功能分支只应该往 master 中增加一个或几个提交。为此,你需要将多个提交压扁Squash成一个或者几个带有更详细信息的提交中。通常使用以下命令来完成:

git rebase -i HEAD~20 # 查看可进行压扁的二十个提交

当这条命令执行后,将弹出一个提交列表的编辑器,你可以通过包括遴选pick或压扁squash在内的数种方式编辑它。“遴选”一个提交即保留这个提交。“压扁”一个提交则是将这个提交合并到前一个之中。使用这些方法,你就可以将多个提交合并到一个提交之中,对其进行编辑和清理。这也是一个清理不重要的提交信息的机会(例如,带错字的提交)。

总之,保留所有与提交相关的操作,但在合并到 master 分支前,合并并编辑相关信息以明确意图。注意,不要在变基的过程中不小心删掉提交。

在执行完诸如变基之类的操作后,我会再次看看 git log 并做最终的修改:

git commit --amend

最后,由于重写了分支的 Git 提交历史,必须强制更新远程分支:

git push -f

使用标签

当你完成测试并准备从 master 分支部署软件到线上时,又或者当你出于某种原因想要保留当前状态作为一个里程碑时,那么可以创建一个 Git 标签。对于一个积累了一些变更和相应提交的分支而言,标签就是该分支在那一时刻的快照。一个标签可以看作是没有历史记录的分支,也可以看作是直接指向标签创建前那个提交的命名指针。

所谓的“配置控制”就是在不同的里程碑上保存代码的状态。大多数项目都有一个需求,能够重现任一里程碑上的软件源码,以便在需要时重新构建。Git 标签为每个代码的里程碑提供了一个唯一标识。打标签非常简单:

采用这六个 Git 协作策略,让嵌入式团队工作更高效

考虑这样一种情况:Git 标签对应的软件版本已经分发给客户,而客户报告了一个问题。尽管代码库中的代码可能已经在继续开发,但通常情况下为了准确地重现客户问题以便做出修复,必须回退到 Git 标签对应的代码状态。有时候新代码可能已经修复了那个问题,但并非一直如此。通常你需要切换到特定的标签并从那个标签创建一个分支:

采用这六个 Git 协作策略,让嵌入式团队工作更高效

此外,如果带附注的标记和带签名的标记有助于你的项目,可以考虑使用它们。

让软件运行时打印标签

在大多数嵌入式项目中,从代码版本构建出的二进制文件有固定的名称,这样无法从它的名称推断出对应的 Git 标签。在构建时“嵌入标签”有助于将未来发现的问题精准地关联到特定的构建版本。在构建过程中可以自动地嵌入标签。通常,git describe 生成的标签字符串会在代码编译前插入到代码中,以便生成的可执行文件能够在启时时输出标签字符串。当客户报告问题时,可以指导他们给你发送启动时输出的内容。

总结

Git 是一个需要花时间去掌握的复杂工具。使用这些实践可以帮助团队成功地使用 Git 协作,无论他们的知识水平。
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4962

    文章

    18145

    浏览量

    286503
  • Linux
    +关注

    关注

    87

    文章

    10942

    浏览量

    206540
  • Git
    Git
    +关注

    关注

    0

    文章

    192

    浏览量

    15396
收藏 人收藏

    评论

    相关推荐

    什么是嵌入式Linux?

    在于现有的Linux是一通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,并且符合POSIX 1003.1b标准,但从本质上来说并不是一嵌入式实时操作系统。Linu
    发表于 01-23 11:59

    如何高效学习嵌入式

    是对的?  在这里我推荐大家学习51系列的单片机,学好了就能毕业出去生存而学习了51+canbus能够你如虎添翼;  三、 分模块学习嵌入式系统  任何一门学问,难得就是入门;而入门,就是要有一完整的知识
    发表于 08-20 17:02

    基于ARM的嵌入式系统程序开发要点()--开发高效程序的技巧 3页 0.2M.pdf

    基于ARM的嵌入式系统程序开发要点()--开发高效程序的技巧 3页 0.2M.pdf
    发表于 09-27 08:46

    基于ARM的嵌入式系统程序开发要点()--开发高效程序的技巧 3页 0.2M.pdf

    基于ARM的嵌入式系统程序开发要点()--开发高效程序的技巧 3页 0.2M.pdf
    发表于 09-29 08:50

    嵌入式系统特点详解 嵌入式系统的大特点

    分享嵌入式系统的大特点是什么?  嵌入式系统特点详解 嵌入式系统的大特点:  1、嵌入式系统
    发表于 06-15 13:34

    嵌入式系统特点详解 嵌入式系统的大特点

    分享嵌入式系统的大特点是什么?  嵌入式系统特点详解 嵌入式系统的大特点:  1、嵌入式系统
    发表于 06-23 11:01

    嵌入式系统特点详解 嵌入式系统的大特点

    分享嵌入式系统的大特点是什么?  嵌入式系统特点详解 嵌入式系统的大特点:  1、嵌入式系统
    发表于 06-28 13:40

    六个嵌入式硬件电路设计的基础知识

    电源的纹波,在嵌入式系统中使用LDO器件。如果采用DCDC不仅个头大,其纹波也是一很头疼的问题。 b、电流 嵌入式系统的正常运行不但需要稳定足够的电源,还要有足够的电流,因此在选择电
    发表于 08-02 10:21

    牛人分析如何高效学习嵌入式

    ,只有成为技术专家+行业专业才能在这个行业立足不倒。  所以我们要有一明确的职业生涯的规划,同时要有一达到这个目标的可以实施的准确的时间表。抓紧时间,提高效率最重要的因素之一。  八、
    发表于 11-12 09:47

    ARM与嵌入式linux的六个入门建议

    由于很多人总问这个问题,所以这里做一总结供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE
    发表于 07-19 01:15

    嵌入式MCU市场的发展策略

    嵌入式应用MCU业务被证明是半导体产品市场上一项赚钱的业务。根据市场调研公司iSuppli的统计,仅仅在中国,目前嵌入式应用MCU市场每年都有20亿美元左右的规模。因此,在半导体业务增速放缓,经济
    发表于 07-19 07:13

    如何开发出一高效嵌入式系统方案?

    本文将描述嵌入式实时系统的关键特征,然后讨论如何在所选择或所开发的硬件和软件构件的基础上开发一高效嵌入式系统方案,并介绍开发这些系统所需的独特关键处理技术。
    发表于 07-30 07:04

    嵌入式系统有什么安全技巧?

    中间人攻击、黑客攻击、间谍和篡改、内存数据错误——嵌入式系统面临各种威胁。儒卓力GDPR专家团队主管兼嵌入式和无线部门营销总监Bertron Hantsche提供了六个安全技巧,以便增
    发表于 10-18 06:28

    如何嵌入式电路设计更高效

    MCU和电源的选择您的嵌入式电路设计更高效
    发表于 04-02 07:16

    自学嵌入式能找到工作

    自学嵌入式能找到工作吗,在网上有很多关于学习嵌入式的文章,说实话,如果我当初入门看了这些文章的话,应该还没开始就选择放弃了。很多说的都太夸张了,什么要学习模拟电路、数字电路、微机原理、汇编、C语言
    发表于 08-09 08:19