Linuxとコマンドラインの基礎
Gitで管理しているプロジェクトの .gitignore に「build/」と書いたが、以前にコミットした build/out.log の変更が、git status に表示され続ける。理由として、正しいものはどれか。
- A.gitignore はまだ追跡していないファイルにだけ効くので、追跡中のファイルは git rm --cached で外す必要があるから
- B.gitignore にはディレクトリを書くことができず、無視したいファイルの名前を1つずつ書く必要があるから
- C.gitignore は、そのファイル自体を git add してコミットするまでは、どのファイルにも効かないから
答えと解説を見る
正解:A. .gitignore はまだ追跡していないファイルにだけ効くので、追跡中のファイルは git rm --cached で外す必要があるから
.gitignore は、まだ追跡していない(一度もコミットや git add をしていない)ファイルを、git status の一覧や git add の対象から外すための設定です。すでに追跡しているファイルは、.gitignore に書いても追跡が続くので、変更が表示され続けます。git rm --cached build/out.log を実行すると、作業ディレクトリのファイルは残したまま追跡だけをやめ、そのことをコミットした後は .gitignore の指定が効きます。シミュレーションの出力やビルドの結果のような大きな生成物は、最初から .gitignore に書いておくのが安全です。
- A. 正しい。追跡中のファイルには .gitignore は効かず、git rm --cached で追跡を外します。
- B. 「build/」のように末尾にスラッシュを付けて書くと、build という名前のディレクトリの中身全体を無視できます。
- C. .gitignore は、作業ディレクトリにあればコミットしていなくても効きます。ただし、チームで同じ設定を使うためにコミットしておくのが一般的です。