4

diffのような一時ファイルを無視するにはどうすればよいfoo.c~ですか? 一時的なものをデフォルトで無視する構成ファイルはありますか?

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

編集:わかりました、短い答えは

diff -ruN -x *~ ...

より良い答えはありますか?たとえば、これは構成ファイルに入れることができますか?

4

4 に答える 4

4

これはあなたの質問に厳密に答えるものではありませんが、特定のディレクトリを使用してバックアップ ファイルを保持するように Emacs を構成することで問題を回避できます。Emacs または XEmacs にはさまざまな実装があります。

GNU Emacs では

    (defvar ユーザー一時ファイルディレクトリ
      (concat 一時ファイルディレクトリ ユーザーログイン名 "/"))
    (make-directory user-temporary-file-directory t)
    (setq コピーによるバックアップ t)
    (setq backup-directory-alist
      `(("." . ,ユーザー一時ファイルディレクトリ)
        (,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 で

    (「自動保存」が必要)
    ('backup-dir が必要)

    (defvar ユーザー一時ファイルディレクトリ
      (concat (temp-directory) "/" (user-login-name)))
    (make-directory user-temporary-file-directory t)
    (setq コピーによるバックアップ 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 ,ユーザ一時ファイルディレクトリフルパス)))

簡単な検索コマンドでそれらをすべて削除することもできます

    探す 。-名前「*~」 -削除

アスタリスクとチルダが二重引用符で囲まれていることに注意してください。これは、シェルがそれらを展開しないようにするためです。

ところで、これらは厳密には一時ファイルではありません。これらはファイルの以前のバージョンのバックアップであるため、将来いつでも最後の編集を手動で「元に戻す」ことができます。

于 2008-08-28T18:55:05.333 に答える
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

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

于 2009-07-08T17:56:57.367 に答える
0

ポスターはこれを「短い答え」として挙げています:

diff -ruN -x *~ ...

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

これの方が良い:

diff -r -x '*~' dir1 dir2

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

于 2014-10-12T22:28:24.720 に答える
0

次のような小さなサンクション/スクリプトを作成できます。

#!/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 でバックアップ ディレクトリを構成することです。そのため、バックアップ ファイルは常に作業ディレクトリの外の同じ場所に移動します。

于 2008-08-28T18:57:39.040 に答える