はじめに
.gitignore
をちゃんと触ったことがなく、
「gitによってやり取りされないためのもの」くらいのイメージしかありませんでした。
.gitignore
に特化して使ってみたところ、勘違いしていた点があったので記事にします。
Githubからローカルへclone
してみる
このレポジトリから、test2.txt
だけ.gitignore
に記述し、ローカルにclone
してみます。
予想では、test.txt
だけがローカルにclone
されると思いましたが・・・
あれ?test2.txt
が存在しますね。
test2.txt
を編集してコミットし、リモートにpush
してみましょう。
push
も行われています。あれ?.gitignore
が機能してない?
すでに追跡されているファイルには無効
実は、すでに追跡されているファイルの場合、.gitignore
は無効なようです。
.gitignore
ファイルはGitで無視するファイルやディレクトリを指定するために使用されますが、これが適用されるのはファイルがGitによって追跡されていない時だけです。つまり、.gitignore
に記載されているファイルが既にリモートリポジトリに存在している場合、そのファイルは.gitignore
の設定にかかわらずリポジトリに含まれます。
先程のように、すでに追跡されているファイルを.gitignore
で追跡しないようにしたいときは
git rm --cached file_or_directory
で、gitの追跡から外す必要があるようです。
(--cached
オプションは、ワーキングディレクトリのコピーには影響せず、ステージングエリアのみに影響を与えるオプション)
この状態でadd
/ commit
/ push
してみましょう。
おお!test2.txt
が消えました!
なるほど、追跡をやめてpush
しましたからね。こうなるんですね。
commitもちゃんとされています。
まとめ
-
.gitignore
は「すでにgitが追跡しているファイル」には効力がない
よって、リモートにすでに存在しているファイルには無効 - すでに追跡されているファイルの場合、
git rm --cached file_or_directory
で追跡から除外する必要がある
知ったつもりでしたが、手を動かしてみると学びがありました。
さて、次は何を書こうかしら・・・