【问题标题】:Using diff on only selected files in a directory/sub directory仅对目录/子目录中的选定文件使用差异
【发布时间】:2026-01-31 20:30:01
【问题描述】:

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

显而易见的方法是简单地对所有单个文件进行比较,然后通过复制/粘贴将它们聚合到一个文件中,但是有自动的方法吗?如果不是,那么首选的方法是什么?

【问题讨论】:

    标签: diff patch


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】: