LoginSignup
2
3

More than 5 years have passed since last update.

Git で Icon^M とかいうどうしようもないファイルを無視する

Last updated at Posted at 2018-02-19

投稿後にこんな投稿必要ないことがわかりました…。「Icon^M なんてファイル Git で見たことないぞ」って人は正しいことをやってる (余計なことをやっていない) わけで、読む必要はありません。

グローバルな gitignore ファイルを ~/.gitignore_global などに明示的に変更している人に当てはまります。追記 をどうぞ。てかそんな変更やめちゃえって話ですね。投稿する前にもっとよく調べるべきでした。とりあえず残しておきますが、色んな意味で以下のやり方はよくありません。


毎回毎回やり方忘れて調べてるのかったるいのでメモ。Emacs 上での話です。

  • .gitignore を開く
  • 最初の行に # -*- enable-delete-trailing-whitespace-before-save: nil -*- と書く
  • C-x C-v RET (あるいはM-x find-alternate-file RET) で .gitignore を開き直す
  • 「なんかローカル変数をセットしろとか言ってて危険な気がするけどどうする?」と Emacs が言ってくるがそれはさっき付け加えた行のせいなので y を押して有効にする
  • Icon^M^M のエントリを付け加える。^MC-q C-m (あるいは M-x quoted-insert RET C-m) で入力できる
  • 保存する

もし最初のコメント行がなかったら、折角入れた ^M^M が保存時に消されるかもしれません。Emacs の設定にもよりますが、そのようなことに左右されないよう最初の行が必要です。

まあ Git で無視はできたとしても、ls が崩れたりしちゃって大変うざいのには変わりないんですけどね…。.DS_Store は邪魔くさいだけだけど Icon^M はひどすぎる。

追記

投稿したあとで Icon^M^M はいわゆる global gitignore に書くほうがいい気がしました。なんで今まで気づかなかったのだろう…。でそう思ってちょっと調べたら 「[Git] .gitignoreの仕様詳解#Thumbs.dbや.DS_Storeを.gitignoreに入れるのはよくないって本当?」 というのが見つかりました。

で、もう少し調べたら ~/.config/git/ignore にはすでに Icon^M^M のエントリがありました。なのでglobal gitinit ファイルを標準のものから別のものに変えている人がこのような面倒に巻き込まれているようです。これも先のリンク先で少し触れられています。この設定をした人は大抵 ~/.gitignore_global を global gitignore に設定しているようです。

コマンドラインから git config --global --get core.excludesfile と打って何らかのファイル名が出て来る人は標準でないファイルに global gitignore を設定しています。

この設定をしている人は変な設定を外しちゃいましょう。

  • 必要ならば global gitignore のエントリを ~/.config/git/ignore に書き写す1
  • rm `git config --global --get core.excludesfile`
  • git config --global --unset core.excludesfile

  1. 書き写すときは ~/.config/git/ignore を開いた後に M-: (setq enable-delete-trailing-whitespace-before-save nil) RET をしましょう。Emacs に ^M を消されないための設定です。 

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3