2008-08-28 20 views
3

Comment faire diff pour ignorer les fichiers temporaires tels que foo.c~? Y at-il un fichier de configuration qui fera ignorer les temporaires?Ignorer les fichiers générés automatiquement par Emacs dans un diff

Plus généralement: quelle est la meilleure façon de générer un correctif "propre" à partir d'une archive tar? Je le fais assez rarement (soumettre une correction de bug à un projet OSS par e-mail) que je lutte toujours avec elle ...

EDIT: OK, la réponse est

diff -ruN -x *~ ... 

Y at-il une meilleure réponse ? Par exemple, cela peut-il aller dans un fichier de configuration?

Répondre

4

Cela ne répond pas strictement à votre question, mais vous pouvez éviter le problème en configurant Emacs pour utiliser un répertoire spécifique pour conserver les fichiers de sauvegarde. Il existe différentes implémentations pour Emacs ou XEmacs.

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

Vous pouvez également les supprimer tous avec une simple commande find

 
    find . -name “*~” -delete 

Notez que l'astérisque et tilde sont dans le double citations pour arrêter l'enveloppe en les élargissant. Par ailleurs, ce ne sont pas strictement fichiers temporaires. Ils sont une sauvegarde de la version précédente du fichier, de sorte que vous pouvez annuler manuellement votre dernière modification à tout moment dans le futur.

0

Vous pouvez créer un petit sunction/script à elle, comme:

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

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

Ceci est seulement un moyen de ce script. Le moyen simple. Mais je pense que tu as eu l'idée.

D'autres suggestions sont la configuration dans emacs un répertoire de sauvegarde, de sorte que vos fichiers de sauvegarde vont toujours au même endroit, en dehors de votre répertoire de travail!

+0

Ceci omet une information importante, comme si un fichier avait été supprimé de newdir; ça ne paraîtrait pas ici. –

2

Vous pouvez créer un ignorer fichier, comme ceci:

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

puis exécutez diff avec option -X, comme ceci:

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

Il y avait un fichier .diffignore "fermer" au noyau Linux (peut-être un fichier informel), mais je ne pouvais plus le trouver. Habituellement, vous continuez à utiliser ce fichier ignore, en ajoutant simplement de nouveaux modèles que vous voulez ignorer.

0

L'affiche a mentionné comme la « réponse courte »:

diff -ruN -x *~ ... 

mais cette alimentation écosser forcera la * à globbed avant diff est invoquée.

C'est mieux:

diff -r -x '*~' dir1 dir2 

J'omettez le -u et des drapeaux -N que ceux sont des questions de goût et non pertinent à la question à portée de main.

Questions connexes