web-dev-qa-db-ja.com

リポジトリから奇妙な「Iconr」ファイルを削除します

私のgitリポジトリでは、ステージング領域に、元に戻す、削除する、コミットすることを拒否している奇妙なファイルがあります-基本的に私はそれを消えさせることはできません..

このファイルは、何年もの間フォルダ内にある古いOS9ファイルである必要があります。

数日前にファイルシステムでファイルを削除したので、gitはIconrの削除を追跡しています。

しかし、それはそこで立ち往生しています。

SourceTree(私のgit UIクライアント)を介して取得するエラーは

致命的:pathspec'folder/Iconr 'はどのファイルとも一致しませんでした

そのファイルについてgit 完全に忘れるを作成する方法はありますか?

28
ATV

より正確なエラーメッセージを表示するには、コマンドラインに戻ることをお勧めします。

そこで、そのファイルの削除をリポジトリに登録するために、git add -u、続いてgit commitを試すことができます。
例として、「 git statusはファイルが削除されたと言いますが、git rmerror: pathspec '…' did not match any files "と言います」を参照してください。

Git cleanが何を与えるかをプレビューすることもできます:git clean -d -x -n( " Gitでフォルダーを削除しようとすると「pathspec」がないのはなぜですか? "で説明されています)

もう1つの問題は、そのファイルが現在のブランチではまったく追跡されていないが、別のブランチで追跡されている場合です。それが事実であるかどうかを確認するには、 その答え を参照してください。

9
VonC
28
Tak Shira

一般的な回避策として、このブログエントリで説明されているように.gitignoreファイルを編集してIcon\rファイルを完全に無視することができます: Gitのヒント:.gitignoreのアイコン\ rを無視する

2
cacau

Icon^Mのようなファイルは、ほとんどの場合、フォルダを強調表示している Folderol などの外部アプリによって作成されます。 。

それを実行しているアプリを削除するか、.gitignoreファイルで無視する必要があります。

printf "Icon\r\r" >> .gitignore

これはシェルコマンドです。または、Icon??として追加するか、^M特殊文字を次のように再現できます。 Control-V と打つ Enter

関連: gitでアイコンを無視する方法

この変更をリポジトリにコミットしたくない場合は、グローバル.gitignoreに追加するか、.git/info/excludeに追加してください。

参照: Gitの使用/ファイルの無視

ファイル自体を削除するには、次のことを試してください。

find . -type f -name 'Icon?' -print -delete

または、ステージングされていないのがそれらだけの場合は、git clean -fを実行します。

2
kenorb

SourceTreeで「Iconr」と表示されるのは実際には「Icon\r」です。ここで、\ rは16進値0x0dです。

.gitignoreファイル名パターンマッチングは、POSIX正規表現と比較して制限されています。 「Icon\r」や「Icon\x0d」などの正規表現パターンは、SourceTreeでは機能しませんでした。

Simple Ignore:。gitignoreファイルにIcon?パターンを追加すると、SourceTreeで「Iconr」ファイルが無視されるように機能します。

警告:Icon?は1文字のワイルドカードである?を使用します。したがって、「Icon\r」、「icona」、「icon3」などのファイルは、Icon?パターンで無視されます。したがって、必要に応じて、Icon01icon02iconaaの代わりにファイル名Icon1icon2iconaを使用してください。そのようなファイルをgitに追加します。

Precise Ignore:正確なIconrファイル名は、binhexエディターでは無視できます。

Binhexエディターで、0a 49 63 6e 6e 0d 0d 0aを追加します。余分な0aは、後でunixファイルを編集するために「Icon\r\r」を囲むための改行です。

警告:正確な49 63 6e 6e 0dを使用する場合は、\ rを\ nに置き換えないように注意してください。つまり、このアプローチで行区切り記号を自動置換するように設定されたテキストエディタで.gitignoreを編集しないでください。

注:Simple Ignore Icon?は、ほとんどのユースケースで便利で十分です。SourceTreeを終了して再起動し、表示します。変更が有効になります。 macOS gitは、デフォルトでは大文字と小文字を区別しません。

1
l --marc l