【问题标题】:Is it possible to use diff and patch tools to achieve the desired result?是否可以使用差异和补丁工具来达到预期的效果?
【发布时间】:2016-11-03 09:39:57
【问题描述】:

我有一个目录 D-1.0.3 和 D-1.0.5,其中包含文件 A 和 B(以及 D-x.x.x 中的其他子目录和文件)以及文件 A 和 B 的以下版本树(在版本控制方面类似,还有其他子目录和文件)

1.0.3 - 1.0.5

|

1.0.3.1(头部)

我想使用差异和补丁工具应用从 1.0.5 到 1.0.3.1 的更改,因为我无法访问与文件关联的 git 或 svn 工具。

这可能使用统一的差异格式(或其他格式)吗?如果可能的话,我该如何实现(我需要执行的命令集)?

我已检查没有与更改关联的文件名的添加、删除或重命名。

非常感谢!

【问题讨论】:

    标签: unix diff patch


    【解决方案1】:

    是的,您可以使用diff 来捕获两个目录树之间的差异。有几个陷阱:

    • 如果您有 文件(不在旧树中),您应该使用-N 选项
    • 如果添加或删除了目录,diff 不会告诉您这些目录中的文件。我使用了一个 Perl 脚本 makepatch(比 CPAN 上的旧版本)来解决这个问题。

    对于简单的情况(没有添加/删除目录),您可以使用

    diff -Naur olddirectory newdirectory >myfile.diff
    

    我会将它应用到要修补的目录的顶层,

    patch -p1 < myfile.diff
    

    以消除由于该目录的实际名称引起的问题。 -p1 选项丢弃顶级目录的名称。

    回顾一下,假设这些是您的目录的名称,当前目录的所有子目录:

    diff -Naur 1.0.3 - 1.0.5 >mydiff.diff
    cd 1.0.3.1 && patch -p1 <mydiff.diff
    

    【讨论】:

    • 感谢您的尝试,但如果您注意到,我有 3 个目录,而不仅仅是 olddirectory 和 newdirectory 有很多教程告诉我如何区分 2 个直接相关的目录。 3个目录之间的关系是根据上面的树,你可以调整命令以适应要求吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多