仅对目录/子目录中的选定文件使用diff

时间:2013-07-24 19:40:46

标签: diff patch

我正在尝试为我的项目创建补丁。
本质上我有一个包含许多文件和子目录的目录,我的补丁应该只适用于各个子目录中的文件子集。 我不能在整个原始vs修改目录上使用diff,因为还有其他文件会受diff的影响。是否有自动方式使用diff命令仅为文件子集创建补丁?

显而易见的方法是简单地区分所有单个文件,然后使用复制/粘贴将它们聚合在一个文件中,但是有一种自动执行此操作的方法吗?如果不是这样做的首选方式是什么?

2 个答案:

答案 0 :(得分:2)

通常,在这种情况下,补丁文件中感兴趣的文件的大多数路径都是相同的,除了最顶层的组件。例如:

diff -u original/some/path/foo.c mine/some/path/foo.c

您应该创建要为其创建补丁的完整文件列表,但丢失最顶层的路径组件。使用该列表,您只需将其提供给循环,该循环将每个文件名提供给diff命令,并添加文件的顶部。

$ cat changed_files
some/path/foo.c
some/other/path/bar.c
$ while read f ; do diff -u original/$f mine/$f ; done < changed_files > patch_file

答案 1 :(得分:0)

一个不错的工具是rsync,它允许您将文件从一个目录“同步”到另一个目录。通过使用--dry-run选项,您可以查看哪些文件不同。如果你不在乎差异是什么,这是一个很好的选择。