如何让diff
忽略foo.c~
等临时文件?是否有一个配置文件会忽略临时值?
更一般地说:什么是从tarball生成“干净”补丁的最佳方法?我很少这样做(通过电子邮件向OSS项目提交错误修复),我一直都在努力...
编辑:好的,简短的回答是
diff -ruN -x *~ ...
有更好的答案吗?例如,这可以放在配置文件中吗?
答案 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标志,因为这些都是品味问题,与手头的问题无关。