3

我有大量的 CSS 文件要查看,有人刚刚通过对许多子站点上的各种核心样式表进行更改而咕哝着。显然,如果最初的开发人员有一些远见,他们会只包含一个主样式表并覆盖必要的元素……</p>

我一开始comm以为它可以解决问题,但很快发现它需要接收排序的输入文件。

diff然后,我通过一些阅读和研究切换到以下内容:

diff --unchanged-group-format="@@ %dn,%df%c'\012'%<" --old-group-format='' --new-group-format='' --changed-group-format='' file_1.css file_2.css

前一个显然几乎就在那里,但是:

A)我需要找出@@线条(这应该没问题,对吧?乍一看这似乎是正确的,但是否会diff抛出任何其他需要被拉出的意外线条?)然后

B)我需要再创建两个文件,首先是 file_1.css 中剩余的唯一行,然后是 file_2.css 中剩余的唯一行。

显然,第一个“共同”文件将进入一个包含文件夹,然后作为一个包含在后面两个创建的文件中@import url("common.css");

我认为以下简单的更改将创建我所指的后两个文件:

diff --unchanged-group-format='' --old-group-format="@@ %dn,%df%c'\012'%<" --new-group-format='' --changed-group-format='' file_1.css file_2.css

diff --unchanged-group-format='' --old-group-format='' --new-group-format="@@ %dn,%df%c'\012'%<" file_1.css file_2.css

示例文件:

文件 1:https ://gist.github.com/c13843972c47b5037704

文件 2:https ://gist.github.com/fff39eae386e8969dc10

例如,在执行以下测试时:

diff --unchanged-group-format="@@ %dn,%df%c'\012'%<" --old-group-format='' --new-group-format=''   --changed-group-format='' file_1.css file_2.css | egrep -v "^@@\d*" > common.css

diff --unchanged-group-format='' --old-group-format="@@ %dn,%df%c'\012'%<" --new-group-format=''   --changed-group-format='' file_1.css file_2.css | egrep -v "^@@\d*" > old.css

然后搜索bodywith egrep "^body" *css,它只产生了一个 incommon.css和 none in ,而它显示andold.css中有两个不同的条目。所以很明显这种方法是有缺陷的。file_1.cssfile_2.css

如何创建这两个最终成为通用包含和覆盖文件的文件?

4

1 回答 1

0

@ylluminate,你有几个选择:

  1. 使用 BeyondCompare 直观地验证差异。它在比较相似文件方面做得非常出色。它允许保存公共行/仅左行/仅右行。唯一的缺点是它是交互式的,如果您有很多文件,则需要一些时间。从积极的方面来看,您似乎想先通过几次测试来建立信任。
  2. 为 --changed-group-format 添加格式文本并捕获修改后的代码(以及您的命令现在执行的旧代码)。您需要再进行一次比较才能获得新代码中的内容,而不是旧代码中的内容。这里的缺点是验证会很困难。
  3. 将所有行保存在数据库表中并比较列是另一种选择。注意存储新旧行号。缺点是数据线需要唯一,空白行会被切掉。

如果我的文件少于 50 个,我会选择选项 1。

希望这可以帮助。

PS:我与 BeyondCompare 没有任何关系。只是软件的快乐用户

于 2013-10-11T14:30:34.150 回答