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 で無視する変更済みファイルを右クリックし、[このローカル項目を無視する] または [この拡張子を無視する] を選択します。 これらのメニュー オプションは、追跡対象ファイルには存在しません。
[このローカル項目を無視する] のオプションを選択すると、.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 で報告されないようにします。