質問

どうやって作るの? diff 次のような一時ファイルを無視します foo.c~?一時ファイルをデフォルトで無視する設定ファイルはありますか?

より一般的には:tarball から「クリーンな」パッチを生成する最良の方法は何ですか?私がこれを行うことはめったにありません (OSS プロジェクトにバグ修正を電子メールで送信する) ので、いつも苦労しています...

編集:OK、簡単に言うと、

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

以前は Linux カーネルに「近い」 .diffignore ファイル (おそらく非公式ファイル) がありましたが、もう見つかりませんでした。通常、無視したい新しいパターンを追加するだけで、この無視ファイルを使い続けます。

次のような小さな機能/スクリプトを作成できます。

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

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

これは、これをスクリプト化する 1 つの方法にすぎません。シンプルな方法。しかし、あなたはその考えを理解したと思います。

他の提案は、emacs でバックアップ ディレクトリを設定することです。そうすれば、バックアップ ファイルは常に作業ディレクトリの外の同じ場所に保存されます。

投稿者はこれを「短い答え」として挙げています。

diff -ruN -x *~ ...

ただし、これをシェルに渡すと、diff が呼び出される前に * がグロブされます。

これの方が良い:

diff -r -x '*~' dir1 dir2

-u フラグと -N フラグは好みの問題であり、当面の質問とは関係ないため省略します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top