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

时间:2008-08-28 18:50:31

标签: emacs backup diff patch autosave

如何让diff忽略foo.c~等临时文件?是否有一个配置文件会忽略临时值?

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

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

diff -ruN -x *~ ...

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

4 个答案:

答案 0 :(得分:4)

这并不能严格回答您的问题,但您可以通过将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 . -name “*~” -delete

请注意,星号和代字号用双引号来阻止shell展开它们。

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

答案 1 :(得分: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内核(可能是一个非正式的文件),但我再也找不到了。通常你会继续使用这个忽略文件,只需添加你想忽略的新模式。

答案 2 :(得分:0)

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

#!/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中配置备份目录,因此您的备份文件总是在工作目录之外的同一个地方!

答案 3 :(得分:0)

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

diff -ruN -x *~ ...

但是将它提供给shell将导致*在调用diff之前进行全局处理。

这样更好:

diff -r -x '*~' dir1 dir2

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

相关问题