GitExtensionsで学ぶgit入門 (2) バージョン管理したくないファイルを定義する

バックアップファイルやテンポラリファイルのように、「フォルダ内に置きたいけど、バージョン管理してほしくないファイル」があったとします。
そういう時は、「.gitignore」ファイルにそのパターンを記述しておきましょう。
.gitignoreに登録されたパターンにマッチするファイルは、内容が変更されても検出されず、
バージョン管理の対象外となります。

前回リポジトリを初期化しましたが、作成が完了するとそのまま下記画面に進んだと思います。
この画面に「.gitignoreの編集」ボタンがありますね。
これを利用してみましょう。


「.gitignoreの編集」ボタンをクリックすると、下記画面が開きます。
何やら右側に書かれていますが、これは左のエディタ部分に記入する内容の例です。
この例は「デフォルトの無視ファイル」ボタンをクリックすると、左のエディタに送られますので、
VisualStudioで開発している人は、無視パターンをほとんど気にすることなく登録を完了することが出来ます。ラッキーですね!


しかしVisualStudioを使われていない方は、残念ながら手動でパターンを登録していかないといけません。
左のエディタにガリガリと記入してもいいのですが、せっかくなので入力補助機能を使ってみましょう。

このエントリでは、フォルダの構成が下記のようになっていると仮定して説明します。

入門リポジトリ
├ .git
├ フォルダだよん                                                                                                                                                                                                                                                                                    < Dir >
│ ├ dllだよん.dll
│ └ ファイルだよん.txt
├ source.txt
└ 管理させたくない.dll

「Add pattern」ボタンをクリックしてください。
すると下記画面が開きます。


この画面は、先ほどのgitignore編集ダイアログの右側にあるような書式(*.obj等)を「無視するファイルパターン」に入力すると、
リポジトリの管理対象となるファイルから、パターンにマッチするファイルの一覧をPreview欄に表示してくれます。
つまり、Preview欄に表示されているファイルがリポジトリの管理対象外となります。
上記の例では「*.dll」という文字に「管理させたくない.dll」がマッチしたので、
これを登録すると「管理させたくない.dll」が管理対象外になることになります。
登録は「.gitignoreに」ボタンを押すと追加できます。

また、下記のようにフォルダ名を指定すると、フォルダ内のファイル全てが無視されます。


これを繰り返し、全て登録完了したら、編集画面の「保存」ボタンをクリックしてください。
今回の例では.gitignoreも無視して、source.txt以外は管理しないようにしました。

gitignoreの書式

gitignoreの書式は下記のようなルールがあります。

  • #で始まる行はコメントとして扱う。
  • !で始まる行は、一致するパターンを無視しない
  • /で終わる行は、一致するパターンをフォルダのみに適用する
  • /を含む行は、/を相対フォルダの区切りとする
  • それ以外はGLOB*1でパターンマッチングする

上記を元に、色々試してみてください。

後からgitignoreを追記したい場合

今まで説明した操作は、まだ初回のコミットを済ませる前にしか表示されません。
もし後からgitignoreに追加したいパターンが増えた場合は、メイン画面から、
「コミットボタン>作業ディレクトリの変更点>無視されたファイルを編集する」(下図)
でgitignore編集ダイアログを開くことができますので、そこからパターンを追加してください。

また、.gitignoreファイルは、.gitフォルダが作られた場所に作られますので、直接gitignoreファイルをテキストエディタで開いて編集も可能です。


これでソース管理の準備が全て整いました。
次回はソースをコミットし、リポジトリに最初の歴史記録したいと思います。

*1: "unix glob"等で検索すると参考文献が見つかると思います。私はunixに明るくないので詳しくは知りませんが、正規表現に近いので適当でも何とかなります。