我该如何制作 diff 忽略临时文件,例如 foo.c~?是否有一个配置文件可以使忽略临时变量成为默认值?

更普遍:从 tarball 生成“干净”补丁的最佳方法是什么?我很少这样做(通过电子邮件向 OSS 项目提交错误修复),所以我总是为此苦苦挣扎......

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

diff -ruN -x *~ ...

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

有帮助吗?

解决方案

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

在 GNU Emacs 中

    (defvar user-temporary-file-directory
      (concat temporary-file-directory user-login-name "/"))
    (make-directory user-temporary-file-directory t)
    (setq backup-by-copying t)
    (setq backup-directory-alist
      `(("." . ,user-temporary-file-directory)
        (,tramp-file-name-regexp nil)))
    (setq auto-save-list-file-prefix
      (concat user-temporary-file-directory ".auto-saves-"))
    (setq auto-save-file-name-transforms
      `((".*" ,user-temporary-file-directory t)))

在 XEmacs 中

    (require 'auto-save) 
    (require 'backup-dir) 

    (defvar user-temporary-file-directory
      (concat (temp-directory) "/" (user-login-name)))
    (make-directory user-temporary-file-directory t)
    (setq backup-by-copying t)
    (setq auto-save-directory user-temporary-file-directory)
    (setq auto-save-list-file-prefix 
         (concat user-temporary-file-directory ".auto-saves-"))
    (setq bkup-backup-directory-info
      `((t ,user-temporary-file-directory full-path)))

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

    find . -name “*~” -delete

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

顺便说一句,这些并不严格 暂时的 文件。它们是文件先前版本的备份,因此您可以在将来随时手动“撤消”上次编辑。

其他提示

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

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

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

您可以为其创建一个小section/脚本,例如:

#!/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 中配置一个备份目录,这样你的备份文件总是位于工作目录之外的同一个地方!

发帖者将此列为“简短答案”:

diff -ruN -x *~ ...

但是将其输入 shell 会导致 * 在调用 diff 之前被通配。

这个更好:

diff -r -x '*~' dir1 dir2

我省略了 -u 和 -N 标志,因为这些是品味问题,与当前的问题无关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top