文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

使用 diff 和 patch 命令协同开发

2024-12-02 12:13

关注

大家好,我是良许。

之前我在公司上班的时候,需要经常跟外国同事一起协同开发(之前在外企上班)。由于是异地协作,所以沟通几乎全部是通过邮件。

我们有使用 Git 进行代码版本管理,但有时为了快速验证,外国同事非常喜欢发个 patch 包过来让我们做测试。这也是我第一次在工作中使用 diff 和 patch 命令。

简单来讲,diff 命令可以用来创建一个差异文件,然后接收者可以使用 patch 命令将这部分差异代码应用到自己的代码里,达到协同开发的目的。

本文我们就来聊聊,怎么使用 diff 和 patch 命令进行协作开发。

一个简单的例子

大家的业务及所使用的编程语言都不一样,所以为了便于叙述与理解,这里不使用具体的代码,而是一起编写一个具有一定逻辑的步骤文档。

假设你和我正在合作编写一个描述如何泡茶的文件。

下面是你写的代码部分: 

  1. Boil water.  
  2. Warm the teapot.  
  3. Add tea and water to the teapot.  
  4. Place a tea cosy over the teapot.  
  5. Steep for 6 minutes.  
  6. Pour tea into cup.  
  7. Add milk. 

你家不种茶,也没有泡茶经验,所以这里有很多优化空间。

我家毕竟是多年种茶老司机,也培养出多名优秀的卖茶女业务代表,所以我大笔一挥,改进了一下泡茶步骤。

我先将文件复制为 tea-revision.md ,然后在此基础上进行修改,得到以下内容: 

  1. Warm a teapot in the proving drawer of your oven.  
  2. Boil water.  
  3. Add tea leaves to a tea strainer.  
  4. Add strainer and water to teapot.  
  5. Steep for 6 minutes. Keep it warm with a tea cosy.  
  6. Pour tea into cup.  
  7. Optionally, add warm milk. 

在这里,有几行代码语句没有任何改动,比如 Boil water 和 Pour tea into cup ;新增了几行代码,比如第一行 ,而有些行则进行了改动(增加或减少了部分内容)。

这么优秀的代码,你不应用的话太可惜了~

使用diff命令创建差异

我如果直接把写好的代码丢给你,你肯定一头雾水,需要自己去对比两份代码的差异,费时费力。这时 diff 命令就派上用场了。

diff 命令可以直观显示两个文件之间的差异,使用 --unified (或者简写为 -u)选项可以显示哪些行被添加或删除。默认情况下,diff 会将差异结果输出打印到终端。 

  1. $ diff --unified tea.md tea-revised.md   
  2. --- tea.md      2021-11-13 10:26:25.082110219 +1300  
  3. +++ tea-revised.md      2021-11-13 10:26:32.049110664 +1300  
  4. @@ -1,7 +1,7 @@  
  5. +Warm a teapot in the proving drawer of your oven.  
  6.  Boil water.  
  7. -Warm the teapot. 
  8. -Add tea and water to the teapot.  
  9. -Place a tea cosy over the teapot.  
  10. -Steep for 6 minutes.  
  11. +Add tea leaves to a tea strainer.  
  12. +Add strainer and water to teapot.  
  13. +Steep for 6 minutes. Keep it warm with a tea cosy. 
  14.  Pour tea into cup.  
  15. -Add milk.  
  16. +Optionally, add warm milk. 

在这个差异显示中,加号 ( + ) 表示添加到原文件中的内容,而减号 ( - ) 表示删除或更改的行。

根据差异创建patch文件

现在我们有了两份代码的差异部分了,我们可以根据差异生成补丁文件。patch 文件的生成很简单,只需要使用标准 Bash 重定向将 diff 命令的结果输出就行了: 

  1. $ diff -u tea.md tea-revised.md > tea.patch 

该文件的内容与输出到终端的内容完全相同,我们可以使用 cat 或 vim 命令来查看这个文件。说个题外话,使用 Emacs 工具来查看的话,它会根据每行是被添加还是被减去来对每一行使用颜色区分,非常直观。

使用patch文件应用更改

当我生成好了补丁文件之后,我就可以将它发给你(QQ/微信,邮件,或者其它方式都行),你就可以将它应用到你的旧文件中。

这里我们需要使用 patch  命令应用补丁: 

  1. $ patch tea.md tea.patch 

应用了补丁之后,你就得到了一个与我的版本相同的文件: 

  1. $ cat tea.md  
  2. Warm a teapot in the proving drawer of your oven.  
  3. Boil water.  
  4. Add tea leaves to a tea strainer.  
  5. Add strainer and water to teapot.  
  6. Steep for 6 minutes. Keep it warm with a tea cosy. 
  7. Pour tea into cup.  
  8. Optionally, add warm milk. 

随着开发的进行,我们会进行多次代码增减,在这过程中我们可以多次生成补丁并应用,然后互相审核,一起为代码做贡献。

命令安装

在 Linux 和 macOS 系统上,已经默认拥有 diff 和 patch 命令。但在 Windows 系统上就需要自己安装了,一个简单的方法就是通过 Cygwin 来获得这两个命令。

如果你曾尝试通过邮件或微信来协作处理文件,并且发现自己试图描述需要进行更改的位置,那么 diff 和 patch 这两个工具非常适合你,可以省去很多沟通成本。 

 

来源:良许Linux内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯