我正在尝试为我的项目创建补丁。
本质上,我有一个包含许多文件和子目录的目录,我的补丁应该仅适用于各个子目录中的文件子集。
我无法对整个原始目录和修改后的目录使用 diff,因为还有其他文件会受到 diff 的影响。是否有一种自动方法使用 diff 命令仅为文件子集创建补丁?
最明显的方法是简单地比较所有单独的文件,然后通过复制/粘贴将它们聚合到一个文件中,但是有没有一种自动化的方法可以做到这一点?如果不是,首选的方法是什么?
最佳答案
通常,在这种情况下,补丁文件中感兴趣的文件的大多数路径都是相同的,除了最上面的组件。例如:
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
关于diff - 仅对目录/子目录中选定的文件使用 diff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17843416/