代码之家  ›  专栏  ›  技术社区  ›  Shcheklein

无法在Solaris上应用统一差异修补程序

  •  5
  • Shcheklein  · 技术社区  · 14 年前

    例如,如果我有两个文件:

    文件1:

    This is file 1
    

    和文件2:

    This is file 2
    

    并使用以下命令创建修补程序:

    diff -u file1 file2 > files.patch
    

    --- file1       Fri Aug 13 17:53:28 2010
    +++ file2       Fri Aug 13 17:53:38 2010
    @@ -1,1 +1,1 @@
    -This is file 1
    +This is file 2
    

    如果我尝试使用patch命令在Solaris上应用此修补程序:

    patch -u -i files.patch
    

    它挂在:

     Looks like a unified context diff.
    File to patch:
    

    1有没有办法使用Solaris 本机修补程序命令 有统一的差异?

    更新: patch 在Solaris上,如果第二个文件(本例中为file2)与第一个文件(file1)位于同一文件夹中,则挂起。例如,以下比较常见的差异:

    --- a/src/file.src       Sat Aug 14 23:07:29 2010
    +++ b/src/file.src       Sat Aug 14 23:07:37 2010
    @@ -1,2 +1,1 @@
    -1
    -
    +2
    

    无法使用非常常见的修补程序命令:

    patch -p1 -u -d a < file.patch
    

    当下列差异( 注意,第二个文件已重命名 ):

    --- a/src/file.src       Sat Aug 14 23:07:29 2010
    +++ b/src/file_new.src       Sat Aug 14 23:07:37 2010
    @@ -1,2 +1,1 @@
    -1
    -
    +2
    

    会很好的工作。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Gilles 'SO- stop being evil'    14 年前

    单个unixv2和v3都支持上下文差异,但不支持统一差异,因此为了更好的可移植性,应该使用上下文差异( -c 选择 diff patch

    在旧的Solaris版本(我认为是10之前的版本)上,您需要确保 /usr/xpg4/bin 在之前 /usr/bin 在你的 $PATH ,否则您可能会获得某些实用程序的兼容版本,而不是标准版本。

        2
  •  6
  •   alanc    14 年前

    在Solaris上 /usr/bin/patch 是一个旧版本,需要符合一些古老的标准。 /usr/bin/gpatch 在Solaris 8及更高版本上。

        3
  •  2
  •   Tim Cooper    13 年前
    diff -cr old.new new.txt > patch.txt
    
    gpatch -p0 < patch.txt
    

    推荐文章