広告が嫌いですか? 行く 広告なし 今日

.gitignore — ノードモジュールをコミットしてしまうのを防ぐファイル

掲載日

.gitignoreの実用ガイド:どのような機能があるか、構文の仕組み、node_modulesおよび.envファイルに対する一般的なパターン、そしてすべての開発者をキャッチしてしまうすでに追跡されたトラップについて。

.gitignore — コミットを防ぐためのファイル node_modules 1

すべての開発者は少なくとも一度、誤ってコミットした経験があります。 node_modules.env APIキーを含むファイルや200MBのビルドアーテファクト。これは現実の問題です。修正は面倒です。そして、単一のファイルで完全に回避できるべきでした。 .gitignore.

このガイドでは、 .gitignore について説明します。どのように機能するか、どのような内容を記述すべきか、そして経験豊富な開発者でも陥りやすい罠についても述べます。

.gitignore とは何ですか?

.gitignore .gitignore は、Git がバージョン管理から除外すべきファイルやディレクトリを指定するシンプルなテキストファイルです。Git が .gitignoreに記載されたパスを確認すると、そのパスは存在しないと見なされ、ステージング、コミット、または git status の出力に表示されません。

このファイルはリポジトリのルートに存在しますが、プロジェクト固有の .gitignore ファイルをサブディレクトリに配置することもできます。サブディレクトリ内のルールはそのディレクトリとその子ディレクトリにのみ適用されます。

なぜ1つ必要なのか(短いバージョン)

  • 安全 — センス、APIキー、パスワードをGitの履歴から除外します
  • リポジトリのサイズ — 生成されたファイルや依存関係をリポジトリのサイズを膨らませません
  • ノイズの削減 — エディタ設定やOSの不要ファイルがすべての差分を混ぜるのを防ぎます
  • チームの安心感 — すべてのメンバーがクリーンなリポジトリをクローンし、ローカルに依存関係をインストールします

構文の仕組み

ルールはシンプルですが、いくつかの非自明なエッジがあります。

  • 空白行や # を含む行は無視されます(コメントには # を使用してください)
  • スラッシュなしのパターン は、リポジトリ内のどこでもその名前のファイルまたはディレクトリにマッチします: *.log すべてのログファイルをすべての深さで無視します
  • トレーリングスラッシュ はディレクトリのみにマッチします: dist/ ディレクトリを無視しますが、ファイル名が dist
  • のファイルは無視しません リーディングスラッシュ /todo.txt はパターンをリポジトリのルートにアンカーします: todo.txt ルートにあるみの
  • のみを無視します**) ダブルアスタリスク( **/logs マッチする logs/ はディレクトリ境界を越えてマッチします:
  • ツリー内のどこか!) 否定記号(

はパターンを否定し、前のルールで除外されたファイルを再び含めます

# Dependencies
node_modules/

# Environment files
.env
.env.local
.env.*.local

# Build output
dist/
build/

# Editor noise
.vscode/
.idea/
*.swp

# OS files
.DS_Store
Thumbs.db

# Logs
*.log
npm-debug.log*

最小の例

最も一般的な項目(そしてなぜそれが重要なのか)

node_modules/ node_modules/ これは大きな項目です。典型的なNode.jsプロジェクトは npm install に数千のファイルを含み、多くの場合数百MBに達します。これらはバージョン管理に属すべきではありません。誰かがリポジトリをクローンした場合、 package.jsonを実行してローカルに再構築します。常にそれを無視してください。

.env およびシークレットファイル

環境ファイルにはデータベースパスワード、APIキー、サービストークンが含まれます。コミットされた .env は発生するセキュリティ事故を意味します — GitHubは漏洩されたシークレットをスキャンしますが、ボットも同様です。ファイルを無視し、プレースホルダー値を持つ .env.example をコミットして、チームメンバーがどの変数を設定すべきかを知らせます。

dist/ および build/

コンパイルまたはバンドルされた出力は元のソースから派生します。あなたのCIパイプラインは毎回デプロイ時に再構築します。ビルドアーテファクトをコミットすることは、マージコンフリクトや誤った差分を引き起こし、実際のコード変更を隠します。

エディタおよびOSファイル

.DS_Store (macOS), Thumbs.db (Windows), .idea/ (JetBrains), .vscode/ (VS Code設定) — これらは個人のワークスペースファイルです。これらをコミットすると、すべての貢献者にあなたの設定を強制します。マシン固有のノイズをグローバル ~/.gitignore_global に設定して、すべてのプロジェクトに追加する必要はありません。

グローバル.gitignore:一度設定して忘れない

あなたはすべてのリポジトリに適用されるグローバル無視ファイルを設定できます:

git config --global core.excludesfile ~/.gitignore_global

エディタファイル、OSのゴミ、個人的なツールをそこに配置します。プロジェクトの .gitignore は、全チームが無視すべきもの(例: node_modules/ または dist/.

)を用意します。

「既にトラッキングされた」トラップ .gitignore は、未トラッキングファイルのみを追加するのを防ぎます。ファイルがすでにGitの履歴に含まれている場合、 に追加しても何も起こりません。Gitはそのファイルをまだトラッキングし、変更をコミットします。 既にコミットされたファイルをトラッキングから停止するには: .gitignore その後、ファイルはディスク上に残りますが、Gitはそのファイルを無視します。

否定ルール:ファイルの再含め

# Remove the file from git tracking without deleting it locally
git rm --cached path/to/file

# Or remove a whole directory
git rm -r --cached node_modules/

# Then commit the removal
git commit -m "Stop tracking node_modules"

場合によっては、ディレクトリを無視するが、特定のファイルを含める必要があります。たとえば、

を無視し、

をチェックインする場合があります: config/ ただし、否定は無視されたディレクトリ内のファイルを無視することができません。Gitは無視されたディレクトリに降り込むのを停止するため、 config/defaults.json ルールが発動する機会がありません。無視すべき内容を無視するようにする必要があります:

config/
!config/defaults.json

無視すべき内容を無視するようにする必要があります: ! 生成する.gitignoreをあなたのスタックに合わせる

# Wrong — Git never sees defaults.json inside an ignored directory
config/
!config/defaults.json

# Right — ignore everything in config/ except defaults.json
config/*
!config/defaults.json

あなたは最初から書く必要はありません。

gitignore.io (また、 にもあります) は、あなたの言語、フレームワーク、エディタを選択して、瞬時に包括的な無視ファイルを生成できます。GitHubはその gitignore.iogithub/gitignore リポジトリに公式なテンプレートを提供しており、数百の環境をカバーしています。 ほとんどのウェブプロジェクトでは、言語(Node、Python、PHPなど)、エディタ(VS Code、JetBrains)、OS(macOS、Windows)のテンプレートを組み合わせることで、良いスタートラインを得られます。

Gitが無視していることを確認する

2つのコマンドが、予期しない無視ルールをデバッグするのに役立ちます:

特に、ルールが予期しない動作をしている場合に非常に有用です — そのファイル、行番号、パターンを表示します。

# See which files are being ignored in the current directory
git status --ignored

# Find out exactly which rule is causing a file to be ignored
git check-ignore -v path/to/file

git check-ignore -v クイックリファレンス:パターンのキャッチシート

無視する内容

パターンどこでも
*.logすべて .log ファイル
/debug.logのみ debug.log ルートに
logs/名前のディレクトリ logs
**/logslogs どこでものディレクトリ
!important.log再含める important.log を無視する場合でも *.log がマッチする場合
doc/*.txt.txt ファイルを直接 doc/ (サブディレクトリではない)
doc/**/*.txt.txt ファイルをどこでも doc/
広告なしで楽しみたいですか? 今すぐ広告なしで

拡張機能をインストールする

お気に入りのブラウザにIOツールを追加して、すぐにアクセスし、検索を高速化します。

に追加 Chrome拡張機能 に追加 エッジ拡張 に追加 Firefox 拡張機能 に追加 Opera 拡張機能

スコアボードが到着しました!

スコアボード ゲームを追跡する楽しい方法です。すべてのデータはブラウザに保存されます。さらに多くの機能がまもなく登場します!

ニュースコーナー 技術ハイライト付き

参加する

価値ある無料ツールの提供を継続するためにご協力ください

コーヒーを買って