当前位置: 首页 > 工具软件 > wiki2xhtml > 使用案例 >

diffpatch升级_用patch升级Dokuwiki

姜嘉良
2023-12-01

修改了dokuwiki的一些系统配置文件,比如interwiki.conf里面,把英文维基百科改为了中文维基百科,增加互动百科等等。直接覆盖升级之后在去找当时的改动肯定比较麻烦,于是差异安装方式派上了用场。(PS:修改过的文件会patch失败,需要手动更改,上面的interwiki.conf就patch失败了)

一、升级步骤如下

1. 下载当前使用版本和新版本并解压

$> wget http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2005-07-01.tgz

$> wget http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2005-07-13.tgz

$> tar -xzf dokuwiki-2005-07-01.tgz

$> tar -xzf dokuwiki-2005-07-13.tgz

1

2

3

4

$>wgethttp://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2005-07-01.tgz

$>wgethttp://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2005-07-13.tgz

$>tar-xzfdokuwiki-2005-07-01.tgz

$>tar-xzfdokuwiki-2005-07-13.tgz

2. 产生diff列表

$> diff -Naur dokuwiki-2005-07-01 dokuwiki-2005-07-13 > doku.diff

1

$>diff-Naurdokuwiki-2005-07-01dokuwiki-2005-07-13>doku.diff

3. 切换到wiki目录测试升级

$> cd wiki

$> patch -p1 <..>

patching file VERSION

patching file conf/wordblock.conf

patching file inc/actions.php

patching file inc/io.php

patching file inc/lang/cs/admin.txt

patching file inc/lang/cs/admin_acl.txt

patching file inc/lang/cs/lang.php

patching file inc/lang/en/lang.php

patching file inc/lang/no/lang.php

patching file inc/parser/handler.php

patching file inc/parser/xhtml.php

patching file inc/template.php

patching file lib/exe/spellcheck.php

patching file lib/scripts/spellcheck.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$>cdwiki

$>patch-p1<..>

patchingfileVERSION

patchingfileconf/wordblock.conf

patchingfileinc/actions.php

patchingfileinc/io.php

patchingfileinc/lang/cs/admin.txt

patchingfileinc/lang/cs/admin_acl.txt

patchingfileinc/lang/cs/lang.php

patchingfileinc/lang/en/lang.php

patchingfileinc/lang/no/lang.php

patchingfileinc/parser/handler.php

patchingfileinc/parser/xhtml.php

patchingfileinc/template.php

patchingfilelib/exe/spellcheck.php

patchingfilelib/scripts/spellcheck.js

完整的安装包中包含install.php,而我们的wiki可能已经把它删除了,这是测试升级过程会中断,所以把完整安装包中的install.php文件删除在产生diff列表比较好。

4. 测试无误后正式升级

$> patch -p1 <..>

patching file VERSION

patching file conf/wordblock.conf

patching file inc/actions.php

patching file inc/io.php

patching file inc/lang/cs/admin.txt

patching file inc/lang/cs/admin_acl.txt

patching file inc/lang/cs/lang.php

patching file inc/lang/en/lang.php

patching file inc/lang/no/lang.php

patching file inc/parser/handler.php

patching file inc/parser/xhtml.php

patching file inc/template.php

patching file lib/exe/spellcheck.php

patching file lib/scripts/spellcheck.js

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$>patch-p1<..>

patchingfileVERSION

patchingfileconf/wordblock.conf

patchingfileinc/actions.php

patchingfileinc/io.php

patchingfileinc/lang/cs/admin.txt

patchingfileinc/lang/cs/admin_acl.txt

patchingfileinc/lang/cs/lang.php

patchingfileinc/lang/en/lang.php

patchingfileinc/lang/no/lang.php

patchingfileinc/parser/handler.php

patchingfileinc/parser/xhtml.php

patchingfileinc/template.php

patchingfilelib/exe/spellcheck.php

patchingfilelib/scripts/spellcheck.js

就这么愉快的升级完成了~

二、关于diff命令

diff是Unix系统的一个很重要的工具程序。它用来比较两个文本文件的差异,是代码版本管理的基石之一。

功能说明:比较文件的差异。

语  法:diff [-abBcdefHilnNpPqrstTuvwy][-][-C ][-D ][-I ][-S ][-W ][-x ][-X ][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]

补充说明:diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

参  数:

- 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。

-a或--text  diff预设只会逐行比较文本文件。

-b或--ignore-space-change  不检查空格字符的不同。

-B或--ignore-blank-lines  不检查空白行。

-c  显示全部内文,并标出不同之处。

-C或--context  与执行"-c-"指令相同。

-d或--minimal  使用不同的演算法,以较小的单位来做比较。

-D或ifdef  此参数的输出格式可用于前置处理器巨集。

-e或--ed  此参数的输出格式可用于ed的script文件。

-f或-forward-ed  输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。

-H或--speed-large-files  比较大文件时,可加快速度。

-l或--ignore-matching-lines  若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。

-i或--ignore-case  不检查大小写的不同。

-l或--paginate  将结果交由pr程序来分页。

-n或--rcs  将比较结果以RCS的格式来显示。

-N或--new-file  在比较目录时,若文件A仅出现在某个目录中,预设会显示:

Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-p  若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。

-P或--unidirectional-new-file  与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。

-q或--brief  仅显示有无差异,不显示详细的信息。

-r或--recursive  比较子目录中的文件。

-s或--report-identical-files  若没有发现任何差异,仍然显示信息。

-S或--starting-file  在比较目录时,从指定的文件开始比较。

-t或--expand-tabs  在输出时,将tab字符展开。

-T或--initial-tab  在每行前面加上tab字符以便对齐。

-u,-U或--unified=  以合并的方式来显示文件内容的不同。

-v或--version  显示版本信息。

-w或--ignore-all-space  忽略全部的空格字符。

-W或--width  在使用-y参数时,指定栏宽。

-x或--exclude  不比较选项中所指定的文件或目录。

-X或--exclude-from  您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件。

-y或--side-by-side  以并列的方式显示文件的异同之处。

--help  显示帮助。

--left-column  在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。

--suppress-common-lines  在使用-y参数时,仅显示不同之处。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

功能说明:比较文件的差异。

语  法:diff[-abBcdefHilnNpPqrstTuvwy][-][-C][-D][-I][-S][-W][-x][-X][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]

补充说明:diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。

参  数:

-指定要显示多少行的文本。此参数必须与-c或-u参数一并使用。

-a或--text diff预设只会逐行比较文本文件。

-b或--ignore-space-change 不检查空格字符的不同。

-B或--ignore-blank-lines 不检查空白行。

-c 显示全部内文,并标出不同之处。

-C或--context 与执行"-c-"指令相同。

-d或--minimal 使用不同的演算法,以较小的单位来做比较。

-D或ifdef 此参数的输出格式可用于前置处理器巨集。

-e或--ed 此参数的输出格式可用于ed的script文件。

-f或-forward-ed 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处。

-H或--speed-large-files 比较大文件时,可加快速度。

-l或--ignore-matching-lines 若两个文件在某几行有所不同,而这几行同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异。

-i或--ignore-case 不检查大小写的不同。

-l或--paginate 将结果交由pr程序来分页。

-n或--rcs 将比较结果以RCS的格式来显示。

-N或--new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示:

Onlyin目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

-p 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称。

-P或--unidirectional-new-file 与-N类似,但只有当第二个目录包含了一个第一个目录所没有的文件时,才会将这个文件与空白的文件做比较。

-q或--brief 仅显示有无差异,不显示详细的信息。

-r或--recursive 比较子目录中的文件。

-s或--report-identical-files 若没有发现任何差异,仍然显示信息。

-S或--starting-file 在比较目录时,从指定的文件开始比较。

-t或--expand-tabs 在输出时,将tab字符展开。

-T或--initial-tab 在每行前面加上tab字符以便对齐。

-u,-U或--unified= 以合并的方式来显示文件内容的不同。

-v或--version 显示版本信息。

-w或--ignore-all-space 忽略全部的空格字符。

-W或--width 在使用-y参数时,指定栏宽。

-x或--exclude 不比较选项中所指定的文件或目录。

-X或--exclude-from 您可以将文件或目录类型存成文本文件,然后在=中指定此文本文件。

-y或--side-by-side 以并列的方式显示文件的异同之处。

--help 显示帮助。

--left-column 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容。

--suppress-common-lines 在使用-y参数时,仅显示不同之处。

扩展阅读

三、关于patch命令

基本语法

patch

此命令用于为特定软件包打补丁,他使用diff命令对源文件进行操作。

基本命令语法:

patch [-R] {-p(n)} [--dry-run] < patch_file_name

p:为path的缩写。

n:指将patch文件中的path第n条’/’及其左边部分取消。

-R:卸载patch包。

--dry-run:尝试patch软件,并不真正修改软件。

1

2

3

4

5

6

7

8

patch

此命令用于为特定软件包打补丁,他使用diff命令对源文件进行操作。

基本命令语法:

patch[-R]{-p(n)}[--dry-run]

p:为path的缩写。

n:指将patch文件中的path第n条’/’及其左边部分取消。

-R:卸载patch包。

--dry-run:尝试patch软件,并不真正修改软件。

选项p的意义

参数-p来指定从第几层开始比较。比如有一个patch文件的补丁头是这样的:

代码:

--- old/modules/pcitableMon Sep 27 11:03:56 1999

+++ new/modules/pcitableTue Dec 19 20:05:41 2000

如果使用参数-p0,就表示从当前目录,找一个叫作new的目录,在它下面找一个叫modules的目录,再在它下面找一个叫pcitableMon的目录。

如果使用参数-p1,就表示忽略第一层,从当前目录找一个叫modules的目录,在它下面找一个叫modules的目录。这样会忽略掉补丁头提到的new目录。

依此类推。

选项N的意义

再次打补丁时会提示:

Reversed (or previously applied) patch detected! Assume -R?[n]

如果输入y,则还原。接下来询问是否应用补丁:

Apply anyway? [n]

输入y应用补丁。

如果不想看到这些提示可以加选项N:

如果你想严格指定是应用补丁可以使用下面命令(就是增加N参数):

# patch -Np0 < foo.patch

如果你想严格指定是还原补丁可以使用下面命令(就是增加R参数):

# patch -Rp0 < foo.patch

博客能带货吗

 类似资料: