2008-08-28 5 views
3

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

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

EDIT: Хорошо, короткий ответ

diff -ruN -x *~ ... 

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

ответ

4

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

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

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

0

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

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

+0

это исключает один кусок важной информации, например, если файл был удален из newdir; он не появится здесь. – 2014-10-12 22:24:25

2

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

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

Плакат перечислила это как «короткий ответ»:

diff -ruN -x *~ ... 

но кормление это оболочка заставит * быть globbed перед тем дифф вызывается.

Это лучше:

diff -r -x '*~' dir1 dir2 

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