HN 日本語サマリー

← 一覧へ戻る
プログラミング

Gitの誰も教えてくれなかった2つのignoreファイル

Two Git ignore files nobody told me about (mihai.dinculescu.dev)

44 pointsby faithraven26 コメント

要約

この記事では、開発者がGitでファイルを無視する方法として`.gitignore`しか知らなかったために発生していた問題を解説しています。`.gitignore`はリポジトリにコミットされ共有されるため、個人的なメモや設定ファイルなどのローカル専用のファイルを無視するのに不向きでした。しかし、`.git/info/exclude`ファイルとグローバルなignoreファイル(`~/.config/git/ignore`)の存在を知ったことで、リポジトリをクリーンに保ちつつ、機密情報や個人的なファイルを安全に管理できるようになりました。

全文翻訳

Gitの誰も教えてくれなかった2つのignoreファイル 投稿日: 2026-09-23 :: 4分で読める :: ソースコード:: claude-code git 私の多くの悪い習慣の一つに、作業中のリポジトリに追跡されていないファイルを持ち歩くことがあります。 しばらく前に、それらのファイルには決して秘密を含めてはならないことを学びました。なぜなら、遅かれ早かれ誤ってコミットされてしまうからです。私は、同僚が苦労して学んだ方法で、それを楽に学びました。彼は必死に履歴を書き換えて痕跡を隠し、その後、パニック状態でクラウドの認証情報をローテーションしました。 最近では、追跡されていないファイルは無害です。ランダムなマークダウンノートや、多くの場合、エージェントの計画です。まだそれらをコミットし始めていません。それらはすぐに古くなるので、それだけの価値があるとは確信していません。 では、なぜ常にダーティなワーキングツリーを我慢するのでしょうか?それは、ごく最近まで、Gitでファイルを無視する唯一の方法は`.gitignore`に追加することだと知っていたからです。そして、`.gitignore`はコミットされます。これは、リポジトリをクローンする誰もが持つべきもの、例えば古典的な`.env`にはまさに適していますが、私のプライベートノートのために選んだくだらないファイル名をリモートリポジトリにプッシュするのは、クリーンではありません。そのため、私は何もしませんでした。追跡されていないファイルは積み重なっていきました。最後に数えたときは、約10個の計画がありました。 しかし、Claudeが突然、「これらのファイルを`.git/info/exclude`に追加しましょうか?」のようなことを尋ねてきました。 待って、何?それは何ですか? 3つのignoreファイル Gitは3つの場所からignoreパターンを読み取ることがわかりました。すべて同じ構文です。 場所 | 誰に影響するか | コミットされるか? | 一般的な用途 ---|---|---|--- `.gitignore`、任意のディレクトリ内 | リポジトリをクローンする全員 | はい | ビルド出力とローカル環境: `target/`, `__pycache__/`, `.venv/` `.git/info/exclude` | このクローンのみ | いいえ | プロジェクトが知る必要のない、あなた自身のスクラッチファイル グローバルexcludesファイル、`core.excludesFile`(デフォルトは`~/.config/git/ignore`)で設定 | このマシン上の、あなたが作業するすべてのリポジトリ | いいえ | エディタやOSのゴミ: `.idea/`, `.vscode/`, `Thumbs.db`, `.DS_Store` リポジトリごとの`.git/info/exclude`は、私が興奮しているものです。それは`.git`の中に存在するため、誤ってコミットされることもなく、他の誰もそれを見ることはありません。おそらく、すぐにいくつかのものを`~/.config/git/ignore`に移動するでしょう。エディタのゴミは、どのプロジェクトの`.gitignore`にも存在するべきではありません。それにもかかわらず、ほとんどのプロジェクトに存在しています。 もちろん、これらすべては公式ドキュメントに非常によくまとめられています。もし私がそれを読むこと、あるいはそれを検索することを思いついていれば、の話です。私はそうしませんでした。そして、gitが私たちのほとんどが偶然に学んだツールであると賭けてもいいでしょう。その中には幸運なものもあれば、そうでないものもあります。幸いなことに、今回は前者でした。 それらの使用法 新しく知った2つは、`.gitignore`と同じパターンを取るプレーンテキストファイルです。専用のgitコマンドはありません。ただ追加するだけです。 リポジトリごと、リポジトリのルートから: ``` echo 'plans/' >> .git/info/exclude echo '*.notes.md' >> .git/info/exclude ``` パターンは、トップレベルの`.gitignore`の場合とまったく同じように、リポジトリのルートを基準にマッチングされます。ファイルは通常すでに存在しており、いくつかコメントアウトされた例が含まれています。注意点: リンクされたgit worktreeでは、`.git`はディレクトリではなくファイルになるため、上記のパスは機能しません。excludeファイルはメインリポジトリの`.git/info/exclude`にあり、すべてのworktreeをカバーします。これは、メインリポジトリから、および任意のリンクされたworktreeから正しいファイルに解決されます。 ``` echo 'plans/' >> "$(git rev-parse --git-common-dir)/info/exclude" ``` グローバルに: ``` mkdir -p ~/.config/git echo '.DS_Store' >> ~/.config/git/ignore echo '.idea/' >> ~/.config/git/ignore ``` Gitは、存在する場合(またはその変数を設定した場合、$XDG_CONFIG_HOME/git/ignore)、`~/.config/git/ignore`を自動的に読み取ります。設定するものは何もありません。もし別の場所に置きたい場合は、一度gitに指示してください。 ``` git config --global core.excludesFile ~/.gitignore_global ``` どちらのファイルを使用しても、ファイルがすでに追跡されていない限り、`git status`はすぐにファイルのリスト表示を停止します。ignoreルールは追跡されたファイルには決して適用されません。 Claude Codeに関する注記 エージェントの計画を無視することが、実行中の例でした。デフォルトでは、Claude Codeは、`@`でファイルを参照したときのオートコンプリートから無視されたファイルを除外します。そのため、計画が`.git/info/exclude`に入った瞬間、ピッカーから消えます。 それらを元に戻すには、`settings.json`にこれを追加します(または`/config`の「ファイルピッカーで`.gitignore`を尊重する」を切り替えます)。 ```json { "respectGitignore": false } ``` これは`@`のオートコンプリートに関するものです。Claude Codeは設定に関係なくファイルを読み取ることができます。タイプするときに提供しないだけです。設定リファレンスに詳細があります。 さて、これで終わりです。もし私のように、`.gitignore`しか知らず、プロジェクトの全員とメモの取り方を共有することに躊躇していたなら、あなたは今、露出していると感じることなく、クリーンなワーキングツリーを持つことができます。 AI使用に関する免責事項 英語は私の母国語ではなく、どの言語でも才能のあるライターではありません。そのため、AIを使って文章を推敲しています。アイデア、セットアップ、間違い、意見はすべて私自身のものです。それらはAIに、不完全な英語での詳細なメモとして渡され、AIが英語を修正します。ただし、思考は提供されません。AIは信頼できるリサーチアシスタントです。