Question

Comment puis-je faire diff ignorer les fichiers temporaires comme foo.c~?Existe-t-il un fichier de configuration qui fera en sorte que l'ignorance des temporaires soit la valeur par défaut ?

Plus généralement:quelle est la meilleure façon de générer un patch « propre » à partir d'une archive tar ?Je fais cela assez rarement (en soumettant une correction de bug à un projet OSS par e-mail) pour que j'ai toujours du mal avec ça...

MODIFIER:OK, la réponse courte est

diff -ruN -x *~ ...

Existe-t-il une meilleure réponse ?Par exemple, cela peut-il figurer dans un fichier de configuration ?

Était-ce utile?

La solution

Cela ne répond pas strictement à votre question, mais vous pouvez éviter le problème en configurant Emacs pour qu'il utilise un répertoire spécifique dans lequel 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)))

Dans 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 tous les supprimer avec une simple commande de recherche

    find . -name “*~” -delete

Notez que l'astérisque et le tilde sont entre guillemets doubles pour empêcher le shell de les développer.

Au fait, ce ne sont pas strictement temporaire des dossiers.Il s'agit d'une sauvegarde de la version précédente du fichier, vous pouvez donc « annuler » manuellement votre dernière modification à tout moment dans le futur.

Autres conseils

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

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

puis cours diff avec -X option, comme ceci :

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

Il y avait un fichier .diffignore "proche" du noyau Linux (peut-être un fichier informel), mais je ne le trouvais plus.Habituellement, vous continuez à utiliser ce fichier ignoré, en ajoutant simplement de nouveaux modèles que vous souhaitez ignorer.

Vous pouvez créer une petite fonction/script, 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

Ce n'est qu'une façon de créer un script.La manière simple.Mais je pense que vous avez compris.

Une autre suggestion consiste à configurer dans Emacs un répertoire de sauvegarde, afin que vos fichiers de sauvegarde soient toujours au même endroit, en dehors de votre répertoire de travail !

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

diff -ruN -x *~ ...

mais le fait de transmettre ceci au shell entraînera la globalisation du * avant que diff ne soit invoqué.

C'est mieux:

diff -r -x '*~' dir1 dir2

J'omets les indicateurs -u et -N car ce sont des questions de goût et ne sont pas pertinents pour la question posée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top