大家好,我是良旭。之前在公司工作的时候,经常需要和国外的同事合作开发(之前在外企工作)。由于是远程协作,几乎所有的交流都是通过电子邮件进行的。我们使用Git来进行代码版本管理,但是有时候国外的同事喜欢发补丁包给我们测试快速验证。这也是我第一次在工作中使用diff和patch命令。简单来说,就是可以使用diff命令创建一个差异文件,然后接收方可以使用patch命令将这部分差异代码应用到自己的代码中,从而达到协同开发的目的。在本文中,我们将讨论如何使用diff和patch命令进行协同开发。一个简单的例子每个人的业务和使用的编程语言都不一样,所以为了描述和理解方便,这里没有使用具体的代码,而是一起写了一个有一定逻辑的步骤文档。假设你和我正在合作编写一份描述如何泡茶的文档。这是您编写的代码的一部分:Boilwater.Warmtheapot.Addteaandwatertotheteapot.Placeateacosyovertheapot.Steepfor6minutes.Pourteaintocup.Addmilk。你家不种茶,没有泡茶经验,所以这里有很大的优化空间。毕竟我家是多年的老茶农,也培养了很多优秀的茶叶销售代表,所以我大笔一挥改进了泡茶步骤。我首先将文件复制为tea-revision.md,然后对其进行修改以获得以下内容:Warmateapotintheprovingdrawerofyouroven.Boilwater.Addtelavestoateastrainer.Addstrainerandwatertoteapot.Steepfor6minutes.Keepitwarmwithateacosy.Pourteaintocup.Optionally,addwarmmilk。在这里,有几行代码语句没有改变,例如Boilwater和Pourteaintocup;添加了几行,例如第一行,并更改了一些行(添加或删除)。这么优秀的代码,不用太可惜了~使用diff命令来创建差异。如果我只是把写好的代码扔给你,你一定会不知所措。需要自己对比两个代码的区别,费时费力。这就是diff命令派上用场的地方。diff命令可以可视化两个文件之间的差异,使用--unified(或简称-u)选项显示添加或删除了哪些行。默认情况下,diff会将差异输出打印到终端。$diff--unifiedtea.mdtea-revised.md---tea.md2021-11-1310:26:25.082110219+1300+++tea-revised.md2021-11-1310:26:32.049110664+1300@@-1,7+1,7@@+Warmateapotintheprovingdrawerofyouroven.Boilwater.-Warmtheteapot.-Addteaandwatertotheteapot.-Placeateacosyovertheteapot.-Steepfor6minutes.+Addtealeavestoateastrainer.+Addstrainerandwatertoteapot.+Steepfor6minutes.Keepitwarmwithateacosy.Pourteaintocup.-Addmilk.+Optionally,addwarmmilk.在这个差异显示中,加号(+)表示对原始文件的添加,减号(-)表示删除或更改的行。根据差异创建补丁文件既然我们已经知道了两个代码之间的差异,那么我们就可以根据差异生成补丁文件了。补丁文件的生成非常简单,只需使用标准的Bash重定向输出diff命令的结果:$diff-utea.mdtea-revised.md>tea.patch文件内容与内容输出到终端,我们可以使用cat或者vim命令查看这个文件。顺便说一句,如果你用Emacs工具查看,它会根据加减来用颜色区分每一行,非常直观。使用补丁文件应用更改当我生成补丁文件后,我可以将它发送给您(QQ/微信、电子邮件或其他方式),您可以将它应用到您的旧文件中。在这里我们需要使用补丁命令应用补丁:$patchtea.mdtea.patch应用补丁后,你会得到一个与我的版本相同的文件:$cattea.mdWarmateapotintheprovingdrawerofyouroven.Boilwater.Addtelavestoateastrainer.Addstrainerandwatertoteapot.Steepfor6minutes.Keepitwarmwithateacosy。Pourteaintocup。可选地,添加温牛奶。随着开发的进行,我们会多次增减代码。在这个过程中,我们可以多次生成和应用补丁,然后互相审查并共同贡献代码。该命令安装在Linux和macOS系统上,默认已经有diff和patch命令。但是在Windows系统上,需要自己安装。一个简单的方法是通过Cygwin获取这两个命令。如果你曾经尝试过通过电子邮件或微信协作处理文件,并发现自己试图描述需要进行更改的地方,那么diff和patch是非常适合你的工具,可以为你节省大量的沟通成本。
