如何diff
忽略临时文件foo.c~
?是否有一个配置文件将使忽略临时文件成为默认设置?
更一般地说:从 tarball 生成“干净”补丁的最佳方法是什么?我很少这样做(通过电子邮件向 OSS 项目提交错误修复),我总是在努力解决它......
编辑:好的,简短的回答是
diff -ruN -x *~ ...
有更好的答案吗?例如,这可以放在配置文件中吗?
这并不能严格回答您的问题,但是您可以通过配置 Emacs 使用特定目录来保存备份文件来避免该问题。Emacs 或 XEmacs 有不同的实现。
在 GNU Emacs 中
(defvar 用户临时文件目录 (连接临时文件目录用户登录名“/”)) (make-directory user-temporary-file-directory t) (setq 复制备份 t) (setq 备份目录列表 `(("." . ,user-temporary-file-directory) (,tramp-file-name-regexp nil))) (setq 自动保存列表文件前缀 (concat user-temporary-file-directory ".auto-saves-")) (setq 自动保存文件名转换 `((".*" ,user-temporary-file-directory t)))
在 XEmacs 中
(需要'自动保存) (需要'备份目录) (defvar 用户临时文件目录 (concat (temp-directory) "/" (user-login-name))) (make-directory user-temporary-file-directory t) (setq 复制备份 t) (setq 自动保存目录用户临时文件目录) (setq 自动保存列表文件前缀 (concat user-temporary-file-directory ".auto-saves-")) (setq bkup-备份-目录信息 `((t ,user-temporary-file-directory full-path)))
您也可以使用简单的 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
曾经有一个 .diffignore 文件“接近”Linux 内核(可能是一个非正式文件),但我再也找不到它了。通常你会继续使用这个忽略文件,只是添加你想忽略的新模式。
您可以为它创建一个小程序/脚本,例如:
#!/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 标志,因为它们是口味问题,与手头的问题无关。