Git でファイルの変更を無視する

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

Git では、プロジェクト内のすべてのファイルを追跡するべきではありません。 開発環境の一時ファイル、テスト出力、ログはすべて、追跡する必要のないファイルの例です。

さまざまなメカニズムを使用して、プロジェクト内のどのファイルを追跡しないかを Git で指定し、Git がそれらのファイルの変更を報告しないようにできます。 Git が追跡しないファイルにおいては、.gitignore または exclude ファイルを使用できます 。 Git が追跡するファイルにおいては、追跡を停止し、変更を無視するように Git に指定できます。

この記事では、次のことについて説明します。

  • .gitignore ファイルを使用すると、追跡しないファイルへの変更を無視します。
  • exclude ファイルを使用すると、追跡しないファイルへの変更を無視します。
  • git update-index コマンドを使用すると、ファイルの追跡を停止し、変更を無視します。
  • git rm コマンドを使用すると、ファイルの追跡を停止し、変更を無視します。

.gitignore ファイルを使用する

プロジェクト内の特定のファイルを追跡しないよう Git に指示するには、.gitignore ファイルを追加して構成します。 .gitignore ファイル内のエントリは、追跡しないファイルにのみ適用されます。 追跡するファイルに対する変更を Git が報告しないようにすることはできません。 追跡対象のファイルは、コミット済みであり、最後の Git スナップショットに存在しているファイルです。

.gitignore ファイル内の各行は、.gitignore ファイル パスを基準としたファイル検索パターンを指定します。 .gitignore 構文は柔軟であり、ワイルドカードを使用して、名前、拡張子、パスで個々のファイルまたは複数のファイルを指定できます。 Git では、.gitignore 検索パターンをプロジェクト内のファイルと照合して、無視するファイルを判断します。

通常の場合、.gitignore ファイルをプロジェクトのルート フォルダーに追加します。 ただし、任意のプロジェクト フォルダーに .gitignore ファイルを追加すると、入れ子になった任意の深さで、そのフォルダーとそのサブフォルダー内で無視するファイルを Git に知らせることができます。 複数の .gitignore ファイルの場合、フォルダ内で指定する .gitignore ファイルのファイル検索パターンは、親フォルダ内で指定する .gitignore ファイルのパターンよりも優先されます。

.gitignore ファイルを手動で作成して、ファイル パターン エントリを追加できます。 または、GitHub の gitignore リポジトリから開発環境用の .gitignore テンプレートをダウンロードして時間を節約することもできます。 .gitignore ファイルを使用する利点の 1 つは、変更をコミットして他のユーザーと共有できることです。

Note

Visual Studio では、Gitリポジトリを作成すると、Visual Studio 開発環境用の .gitignore ファイルが自動的に作成されます。

Visual Studio 2022 では、Git メニューの [Gitの変更]、およびソリューション エクスプローラーのショートカット メニューを使用して、Git バージョン管理エクスペリエンスが用意されています。 Visual Studio 2019 バージョン 16.8 には、チーム エクスプローラーの Git ユーザー インターフェイスも用意されています。 詳細については、「Visual Studio 2019 - チーム エクスプローラー」タブを参照してください。

Git の変更ウィンドウで、Git で無視する変更済みファイルを右クリックし、[このローカル項目を無視する] または [この拡張子を無視する] を選択します。 これらのメニュー オプションは、追跡対象ファイルには存在しません。

Visual Studio の [Git 変更] ウィンドウでの変更されたファイルに対するコンテキスト メニュー オプションのスクリーンショット。

[このローカル項目を無視する] のオプションを選択すると、.gitignore ファイルに新しいエントリが追加され、選択したファイルが変更されたファイルの一覧から削除されます。

[この拡張子を無視する] のオプションを選択すると、.gitignore ファイルに新しいエントリが追加され、選択したファイルと同じ拡張子を持つすべてのファイルが変更されたファイルの一覧から削除されます。

どちらのオプションでも、リポジトリのルート フォルダーに .gitignore ファイルが作成され (まだ存在しない場合)、そこにエントリが追加されます。

gitignore ファイルを編集する

.gitignore ファイルの各エントリは、無視するファイルを指定するファイル検索パターン、番号記号 (#) で始まるコメント、または空白行 (読みやすくするため) のいずれかです。 .gitignore 構文には柔軟性があり、ワイルドカードを使用して、名前、拡張子、パスで個々のファイルまたは複数のファイルを指定できます。 ファイル検索パターンのすべてのパスは、.gitignore ファイルに関連します。

一般的なファイル検索パターンの例を次に示します。

# Ignore all files with the specified name.
# Scope is all repo folders.
config.json

# Ignore all files with the specified extension.
# Scope is all repo folders.
*.json

# Add an exception to prevent ignoring a file with the specified name.
# Scope is all repo folders.
!package.json

# Ignore a file with the specified name.
# Scoped to the 'logs' subfolder.
/logs/test.logfile

# Ignore all files with the specified name.
# Scoped to the 'logs' subfolder and all folders beneath it.
/logs/**/test.logfile

# Ignore all files in the 'logs' subfolder.
/logs/

.gitignore ファイルを変更するとすぐに、Git で無視するファイルの一覧が更新されます。

Note

Windows ユーザーは、.gitignore ファイル内のパス区切り文字として、バックスラッシュ (\) の代わりにスラッシュ (/) を使用する必要があります。 すべてのユーザーは、フォルダーを指定するときに末尾にスラッシュを追加する必要があります。

グローバル .gitignore ファイルを使用する

.gitignore ファイルは、すべてのローカル Git リポジトリに適用されるグローバル無視ファイルとして指定できます。 これを行うには、次のように git config コマンドを使用します。

git config core.excludesfile <gitignore file path>

グローバル .gitignore ファイルにより、Git がコンパイル済みバイナリなどの特定のファイルの種類をローカル リポジトリにコミットしないようにすることができます。 リポジトリ固有の .gitignore ファイルのファイル検索パターンは、グローバル .gitignore ファイルのパターンより優先されます。

exclude ファイルを使用する

また、ファイル検索パターンのエントリをローカルリポジトリの .git/info/ フォルダ内の exclude ファイルに追加することもできます。 exclude ファイルを使用すると、どの追跡しないファイルを無視するかを Git に指示できます。 ファイル検索パターンには、.gitignore ファイルと同じ構文を使用します。

exclude ファイル内のエントリは、追跡しないファイルのみに適用されます。 Git が既に追跡しているコミット済みファイルに対する変更の報告を妨げることはできません。 リポジトリごとに exclude ファイルが 1 つだけ存在します。

Git は exclude ファイルをコミットまたはプッシュしないため、他のユーザーに影響を与えることなく、ローカル システム上のファイルを安全に無視できます。

Git update-index を使用して変更を無視する

ローカル リポジトリ ファイルの追跡を一時的に停止し、Git でそのファイルへの変更を無視することが適切な場合があります。 たとえば、変更をコミットするリスクを起こさずに、開発環境の設定ファイルをカスタマイズする必要が生じる場合があります。 これを行うには、skip-worktree フラグを指定して git update-index コマンドを実行します。

git update-index --skip-worktree <file path>

追跡を再開するには、--no-skip-worktree フラグを指定して git update-index コマンドを実行します。

または、assume-unchanged フラグを指定して git update-index コマンドを使用すると、ファイルの追跡を一時的に停止し、そのファイルへの変更が Git で無視されるようにすることができます。 このオプションは、ファイルの内容を変更する Git の pull 操作によって assume-unchanged フラグが元に戻される可能性があるため、skip-worktree フラグよりも効果が低くなります。

git update-index --assume-unchanged <file path>

追跡を再開するには、--no-assume-unchanged フラグを指定して git update-index コマンドを実行します。

Git rm を使用して変更を無視する

.gitignore または exclude ファイル内のエントリは、Git で既に追跡されているファイルには作用しません。 Git は、これまでにコミットしたファイルを追跡します。 Git スナップショットからファイルを完全に削除して、Git がこれを追跡しないようにするには、ファイルシステムから削除せずに、次のコマンドを実行します。

git rm --cached <file path>
git commit <some message>

この後、.gitignore または exclude ファイル エントリを使用して、そのファイルへの変更が Git で報告されないようにします。

次のステップ