tod*_*not 21 shell diff patch cp
diff -u file1.txt file2.txt > patchfile
Run Code Online (Sandbox Code Playgroud)
创建一个补丁文件,其中包含patch
将 file1.txt 转换为与 file2.txt 完全一样的指令
这不能使用cp
命令来完成吗?我可以想象这在文件太大并且必须通过网络传输时很有用,这种方法可能会节省带宽。有没有其他方法可以使用 diff/patch 在其他场景中是有利的?
cas*_*sey 33
差异可能比仅比较一个文件与另一个文件更复杂。可以比较整个目录层次结构。考虑我想修复 GCC 中的错误的示例。我的更改在 4 或 5 个文件中添加了一两行,并删除了这些文件和其他文件中的几行。如果我想将这些更改传达给某人,可能要包含在 GCC 中,我的选择是
复制整个源代码树没有意义,但是其他两个选项呢,这是您问题的核心。现在考虑到其他人也和我一样处理了同一个文件,我们都将我们的更改交给了某人。此人如何知道我们做了什么以及更改是否兼容(文件的不同部分)或冲突(文件的相同行)?他会区分它们!diff 可以告诉他这些文件彼此之间以及与未修改的源文件有何不同。如果需要差异,那么首先发送差异会更有意义。diff 还可以包含来自多个文件的更改,因此虽然我总共编辑了 9 个文件,但我可以提供一个 diff 文件来描述这些更改。
差异也可用于提供历史记录。如果三个月前的更改导致了我今天才发现的错误怎么办。如果我可以缩小引入错误的时间并将其隔离到特定更改,我可以使用差异来“撤消”或还原更改。如果我只是复制文件,这不是我可以轻松做到的。
这一切都与源版本控制有关,其中程序可以将文件历史记录为从创建之时到今天的一系列差异。差异提供历史记录(我可以在任何特定日期重新创建文件),我可以看到谁破坏了某些东西(差异有一个所有者)并且我可以通过给上游项目提供特定的差异来轻松地向上游项目提交更改(也许当我做了很多更改时,他们只对一项更改感兴趣)。
总之,是的,cp
是不是更容易diff
和patch
,但效用diff
和patch
大于cp
对其中的文件如何变化是很重要的追踪情况。
Ant*_*hon 20
当您获得补丁时,您通常可以(除非您对完全相同的行进行了更改)将补丁应用到您自己也更改过的一组文件中。
该补丁包含有关文件的旧状态和新状态的信息。如果您得到一个复制的文件,您不知道原始文件是什么(旧状态),并且您无法将差异应用到您也更改过的文件(或一组文件),而不会很困难。因此,对于源文件集而言,主要关注的不是空间保留,而是前后信息。
在(上下文/统一)差异之前,这通常是通过编辑器指令完成的(在 X 之后插入一行,删除行 Y),但只有当您知道这些指令开始的状态时,这才有效。因此,只需复制即可遇到与您的“解决方案”相同的问题。
rei*_*ost 11
对文件所做的更改通常比正在更改的文件小得多。
这意味着存储差异可以为您节省大量空间。当diff
创建,磁盘空间是昂贵的。
但这也意味着即使该文件以其他方式发生了更改,您也可以将差异重新应用于该文件。该补丁程序会为你做,并告诉你什么时候有问题。
这实际上是在软件开发中使用差异的最重要原因。当进行了更改(通常是对多个文件)时,可以将其保存为差异:结果称为更改集或补丁。如果一切顺利,补丁不仅仅是一些随意的更改,而是实现了某种功能更改 - 例如错误修复或新功能。
同时,即使在不同的位置,也可能由不同的开发人员进行不同的更改。如果未对同一文件的相同部分进行更改,则可以独立应用这些更改。所以开发人员可以互相发送他们的补丁进行测试。可以建立一整套代表可能发生的变化的补丁;其中一些最终可能会被拒绝,其余的将被集成到系统中。
因此,使用差异允许并发开发。您不再需要一次只进行一项更改。
现代分布式版本控制系统是这种工作方式的延续。
归档时间: |
|
查看次数: |
2428 次 |
最近记录: |