忽略差异中的Emacs自动生成的文件

时间:2020-03-05 18:44:35  来源:igfitidea点击:

如何使diff忽略foo.c〜这样的临时文件?是否有一个配置文件使忽略临时文件成为默认文件?

更笼统地说:从压缩包生成"干净"补丁的最佳方法是什么?我很少这样做(通过电子邮件向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

请注意,星号和波浪号用双引号引起来,以防止外壳扩展它们。

顺便说一下,这些并不是严格的临时文件。它们是文件先前版本的备份,因此我们可以在将来的任何时候手动"撤消"上一次编辑。

回答

我们可以为其创建一个小的函数/脚本,例如:

#!/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中配置备份目录,这样备份文件将始终放在工作目录之外的同一位置!

回答

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

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

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

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

过去曾经有一个.diffignore文件"接近" Linux内核(可能是一个非正式文件),但我找不到了。通常,我们会继续使用此忽略文件,只是添加要忽略的新模式。