Игнорировать автоматически сгенерированные Emacs файлы в diff

StackOverflow https://stackoverflow.com/questions/33073

Вопрос

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

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

Редактировать:Хорошо, короткий ответ таков

diff -ruN -x *~ ...

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

Это было полезно?

Решение

Это не дает точного ответа на ваш вопрос, но вы можете избежать проблемы, настроив 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

    find . -name “*~” -delete

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

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

Другие советы

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

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 (возможно, неофициальный файл), но я больше не мог его найти.Обычно вы продолжаете использовать этот игнорируемый файл, просто добавляя новые шаблоны, которые хотите игнорировать.

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

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

На плакате это указано как "краткий ответ".:

diff -ruN -x *~ ...

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

Так будет лучше:

diff -r -x '*~' dir1 dir2

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top