2008-08-28 66 views
3

如何让diff忽略像foo.c~这样的临时文件?是否有一个配置文件会使临时设置忽略默认设置?忽略Emacs中自动生成的文件

更一般地说:从tarball生成一个“干净”的补丁最好的方法是什么?我这样做很少就够了(提交bug修复,通过电子邮件的OSS项目),我总是与它的斗争......

编辑:OK,简单的答案是

diff -ruN -x *~ ... 

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

回答

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命令将它们全部删除

 
    find . -name “*~” -delete 

注意,星号和波浪线是双引号来阻止shell扩展它们。

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

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

+0

这省略了一条重要信息,如从一个文件从newdir中删除;它不会出现在这里。 – 2014-10-12 22:24:25

2

您可以创建一个忽略文件,像这样:

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内核(也许是一个非正式的文件),但我找不到它了。通常你会继续使用这个忽略文件,只是添加你想忽略的新模式。

0

的海报列出了此作为“简短的回答”:

diff -ruN -x *~ ... 

它们只是这个壳会导致调用DIFF之前*进行晶片被保护。

这是更好的:

diff -r -x '*~' dir1 dir2 

我省略了-u和-n标志为那些品味事项,并以手头上的问题不相关的。