4

如何diff忽略临时文件foo.c~?是否有一个配置文件将使忽略临时文件成为默认设置?

更一般地说:从 tarball 生成“干净”补丁的最佳方法是什么?我很少这样做(通过电子邮件向 OSS 项目提交错误修复),我总是在努力解决它......

编辑:好的,简短的回答是

diff -ruN -x *~ ...

有更好的答案吗?例如,这可以放在配置文件中吗?

4

4 回答 4

4

这并不能严格回答您的问题,但是您可以通过配置 Emacs 使用特定目录来保存备份文件来避免该问题。Emacs 或 XEmacs 有不同的实现。

在 GNU Emacs 中

    (defvar 用户临时文件目录
      (连接临时文件目录用户登录名“/”))
    (make-directory user-temporary-file-directory t)
    (setq 复制备份 t)
    (setq 备份目录列表
      `(("." . ,user-temporary-file-directory)
        (,tramp-file-name-regexp nil)))
    (setq 自动保存列表文件前缀
      (concat user-temporary-file-directory ".auto-saves-"))
    (setq 自动保存文件名转换
      `((".*" ,user-temporary-file-directory t)))

在 XEmacs 中

    (需要'自动保存)
    (需要'备份目录)

    (defvar 用户临时文件目录
      (concat (temp-directory) "/" (user-login-name)))
    (make-directory user-temporary-file-directory t)
    (setq 复制备份 t)
    (setq 自动保存目录用户临时文件目录)
    (setq 自动保存列表文件前缀
         (concat user-temporary-file-directory ".auto-saves-"))
    (setq bkup-备份-目录信息
      `((t ,user-temporary-file-directory full-path)))

您也可以使用简单的 find 命令将它们全部删除

    寻找 。-name “*~” -delete

请注意,星号和波浪号用双引号括起来以阻止 shell 扩展它们。

顺便说一句,这些并不是严格意义上的临时文件。它们是文件先前版本的备份,因此您可以在以后的任何时间手动“撤消”您上次的编辑。

于 2008-08-28T18:55:05.333 回答
2

您可以创建一个忽略文件,如下所示:

core.*
*~
*.o
*.a
*.so
<more file patterns you want to skip>

然后diff使用-X选项运行,如下所示:

diff -X ignore-file <other diff options you use/need> path1 path2

曾经有一个 .diffignore 文件“接近”Linux 内核(可能是一个非正式文件),但我再也找不到它了。通常你会继续使用这个忽略文件,只是添加你想忽略的新模式。

于 2009-07-08T17:56:57.367 回答
0

您可以为它创建一个小程序/脚本,例如:

#!/bin/bash
olddir="/tmp/old"
newdir="/tmp/new"

pushd $newdir
for files in $(find . -name \*.c)
do
  diff $olddir/$file $newdir/$file
done
popd

这只是编写脚本的一种方法。简单的方法。但我想你明白了。

其他建议是在 emacs 中配置一个备份目录,因此您的备份文件总是在您的工作目录之外的同一个地方!

于 2008-08-28T18:57:39.040 回答
0

海报已将此列为“简短答案”:

diff -ruN -x *~ ...

但是将其提供给 shell 会导致 * 在调用 diff 之前被通配。

这个更好:

diff -r -x '*~' dir1 dir2

我省略了 -u 和 -N 标志,因为它们是口味问题,与手头的问题无关。

于 2014-10-12T22:28:24.720 回答