Игнорировать автоматически генерируемые файлы Emacs в diff - PullRequest
4 голосов
/ 28 августа 2008

Как мне заставить diff игнорировать временные файлы, такие как foo.c~? Есть ли файл конфигурации, который сделает игнорирование временных файлов по умолчанию?

В целом: каков наилучший способ создания «чистого» патча из тарбола? Я делаю это достаточно редко (отправляя исправление ошибки в проект OSS по электронной почте), и я всегда с этим борюсь ...

РЕДАКТИРОВАТЬ: ОК, краткий ответ

diff -ruN -x *~ ...

Есть ли лучший ответ? Например, это может пойти в файле конфигурации?

Ответы [ 4 ]

4 голосов
/ 28 августа 2008

Это не дает точного ответа на ваш вопрос, но вы можете избежать этой проблемы, настроив 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 . -name “*~” -delete

Обратите внимание, что звездочка и тильда заключены в двойные кавычки, чтобы остановить расширение их оболочкой.

Кстати, это не строго временные файлы. Они являются резервной копией предыдущей версии файла, поэтому вы можете вручную отменить последнее изменение в любое время в будущем.

2 голосов
/ 08 июля 2009

Вы можете создать файл игнорирования, например:

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

и затем запустите diff с параметром -X, например:

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

Раньше был файл .diffignore, «близкий» к ядру Linux (возможно, неофициальный файл), но я больше не мог его найти. Обычно вы продолжаете использовать этот файл игнорирования, просто добавляя новые шаблоны, которые хотите игнорировать.

0 голосов
/ 13 октября 2014

Автор назвал это как «короткий ответ»:

diff -ruN -x *~ ...

но подача этого в оболочку * приведет к тому, что * будет сглажено до вызова diff.

Это лучше:

diff -r -x '*~' dir1 dir2

Я опускаю флаги -u и -N, так как они являются вопросами вкуса и не имеют отношения к рассматриваемому вопросу.

0 голосов
/ 28 августа 2008

Вы можете создать небольшой сундук / скрипт для него, например:

#!/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 каталога резервного копирования, чтобы ваши файлы резервных копий всегда оставались в одном и том же месте, вне вашего рабочего каталога!

...