2008-08-28 3 views
3

Wie mache ich diff ignorieren temporäre Dateien wie foo.c~? Gibt es eine Konfigurationsdatei, die das Ignorieren von Provisorien zum Standard macht?Ignorieren Emacs automatisch generierte Dateien in einem diff

Allgemeiner: Was ist der beste Weg, um einen "sauberen" Patch von einem Tarball zu generieren? Ich mache das selten genug (ein Bug-Fix zu einem OSS-Projekt per E-Mail einreichen), die ich immer mit ihm kämpfen ...

EDIT: OK, die kurze Antwort ist

diff -ruN -x *~ ... 

Gibt es eine bessere Antwort ? Z. B. kann dies in eine Konfigurationsdatei gehen?

Antwort

4

Dies beantwortet Ihre Frage nicht genau, aber Sie können das Problem vermeiden, indem Sie Emacs so konfigurieren, dass ein bestimmtes Verzeichnis zum Speichern der Sicherungsdateien verwendet wird. Es gibt verschiedene Implementierungen für Emacs oder XEmacs.

In 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))) 

In 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))) 

Sie können sie auch entfernen Sie alle mit einem einfachen Befehl find

 
    find . -name “*~” -delete 

Beachten Sie, dass das Sternchen und Tilde sind in Doppel Zitate, um die Shell zu stoppen, die sie erweitert.

Übrigens sind diese nicht streng temporäre Dateien. Sie sind eine Sicherungskopie der vorherigen Version der Datei, so dass Sie Ihre letzte Bearbeitung jederzeit manuell rückgängig machen können.

0

Sie können ein kleines sunction/script, um es zu erstellen, wie:

#!/bin/bash 
olddir="/tmp/old" 
newdir="/tmp/new" 

pushd $newdir 
for files in $(find . -name \*.c) 
do 
    diff $olddir/$file $newdir/$file 
done 
popd 

Dieser diese nur ein Weg, um Skript. Der einfache Weg. Aber ich denke, du bist auf die Idee gekommen.

Andere Vorschlag ist in Emacs ein Backup-Verzeichnis zu konfigurieren, so dass Ihre Backup-Dateien immer an den gleichen Ort, außerhalb Ihres Arbeitsverzeichnisses!

+0

Dies lässt eine wichtige Information aus, wie wenn eine Datei aus newdir entfernt wurde; es würde hier nicht erscheinen. –

2

Sie können eine Datei ignorieren erstellen, wie folgt aus:

core.* 
*~ 
*.o 
*.a 
*.so 
<more file patterns you want to skip> 

und dann diff mit -X Option ausführen, wie folgt aus:

diff -X ignore-file <other diff options you use/need> path1 path2 

Es verwendet eine .diffignore Datei "close" zu sein zum Linux-Kernel (vielleicht eine informelle Datei), aber ich konnte es nicht mehr finden. Normalerweise benutzen Sie diese Ignorier-Datei und fügen einfach neue Muster hinzu, die Sie ignorieren möchten.

0

Das Plakat hat dies als ‚kurze Antwort‘ aufgeführt:

diff -ruN -x *~ ... 

aber globbed Shell Fütterung verursacht werden, die *, bevor diff aufgerufen wird.

Das ist besser:

diff -r -x '*~' dir1 dir2 

Ich lasse die -u und N-Flags wie die Fragen des Geschmacks und nicht relevant für die Frage auf der Hand.

Verwandte Themen