Pergunta

Como faço diff ignore arquivos temporários como foo.c~?Existe um arquivo de configuração que fará com que ignorar os temporários seja o padrão?

De forma geral:qual é a melhor maneira de gerar um patch "limpo" em um tarball?Eu faço isso raramente (enviando uma correção de bug para um projeto OSS por e-mail) e sempre tenho dificuldade com isso ...

EDITAR:OK, a resposta curta é

diff -ruN -x *~ ...

Existe uma resposta melhor?Por exemplo, isso pode estar em um arquivo de configuração?

Foi útil?

Solução

Isso não responde estritamente à sua pergunta, mas você pode evitar o problema configurando o Emacs para usar um diretório específico para manter os arquivos de backup.Existem diferentes implementações para Emacs ou XEmacs.

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

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

Você também pode removê-los todos com um simples comando find

    find . -name “*~” -delete

Observe que o asterisco e o til estão entre aspas duplas para impedir que o shell os expanda.

A propósito, estes não são estritamente temporário arquivos.Eles são um backup da versão anterior do arquivo, para que você possa “desfazer” manualmente sua última edição a qualquer momento no futuro.

Outras dicas

Você pode criar um arquivo ignorado, assim:

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

e então corra diff com -X opção, assim:

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

Costumava haver um arquivo .diffignore "próximo" ao kernel do Linux (talvez um arquivo informal), mas não consegui mais encontrá-lo.Normalmente você continua usando esse arquivo ignorado, apenas adicionando novos padrões que deseja ignorar.

Você pode criar uma pequena função/script para ele, como:

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

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

Esta é apenas uma maneira de criar um script.A maneira simples.Mas acho que você entendeu.

Outra sugestão é configurar no emacs um diretório de backup, para que seus arquivos de backup vão sempre para o mesmo lugar, fora do seu diretório de trabalho!

O autor da postagem listou isso como a 'resposta curta':

diff -ruN -x *~ ...

mas alimentar isso no shell fará com que * seja globbed antes que o diff seja invocado.

Isto é melhor:

diff -r -x '*~' dir1 dir2

Omito os sinalizadores -u e -N, pois são questões de gosto e não são relevantes para a questão em questão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top