忽略差异中的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内核(可能是一个非正式文件),但我找不到了。通常,我们会继续使用此忽略文件,只是添加要忽略的新模式。