LoginSignup
2
0

More than 5 years have passed since last update.

.gitignoreについて(dotinstall git入門で詰まったのでちょっと調べてみた)

Posted at

.gitignoreとは

.gitignoreファイルを作成し、ファイルやディレクトリを指定することでgitの管理から外すことができる。.logファイルなど、管理する必要はないけどファイルサイズが大きいものとかに適用させる。

詰まったところ

dotinstallのgit入門「#09_git管理に含めない設定」において、作業ディレクトリに

作業ディレクトリ
index.html
error.log

がある状態で.gitignoreを作成し、git statusで確認すると、.logファイルが消えて.gitlgnoreファイルしかgitが管理対象として識別していませんねと説明。

動画通りだと

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .gitignore
nothing added to commit but untracked files present (use "git add" to track)

となる予定だったけど、実際自分が行ってみると

# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   error.log
#   modified:   style.css
#
no changes added to commit (use "git add" and/or "git commit -a")

おい、認識されてるじゃねーか・・・
どういうこっちゃとなった訳ですよ。
(ちなみにstyle.cssはなんとなく作ったので無視しておけ)

現状を整理

まず動画で行なっている手順を簡単にまとめてみると
1. 今まで編集していたindex.htmlとは別に、新たにerror.logを作成(viコマンドで)
2. git statusで確認すると(動画内では確認してないけど)新たに作成されたerror.logがまだステージングエリア(インデックス)にaddされてないよと表記される(予定)。
3. そこで.gitignoreを作成し、拡張子.logのファイルはすべて無視するように

.gitignore
*.log

と編集し、保存(iで挿入モード - *.logと入力 - escキー - :wqで上書き保存)。

4.git statusで確認すると、先ほど作成したerror.logが表示されなくなり、代わりに.gitignoreのみ表示されるようになりましたね。
-> つまりgit.error.logを管理対象から外していることがわかりますねという感じ

原因

上で表記した通り、動画内では、新たに作成したファイル(addもcommitもしてない)に対して.gitignoreを作成してgit statusを確認すると.logのファイルが表示されなくなったよと説明していた。

それに対して自分の場合、「#08_gitでのファイル操作について」のレッスンにおいて、今いるディレクトリより下の階層にある作成・編集したすべてのファイルをステージングエリア(インデックス)にあげるgit add .の動きを確認するため、今までindex.htmlしか扱っていなかったが、新たにstyle.csserror.logを作成し、git add .を確認してそのまま次のレッスンに進んでしまっていた。
-> つまり勝手なことをしたことによる自爆ですね。

dotinstallの動画ではgit add .による動きを口頭のみで説明したので、動画通りに進めていたらディレクトリ内にはindex.htmlしかないため、本レッスンでerror.logを作成した状態で進めていれば動画通りに動くよということでした。

そう考えると、自分の出てきた画面を見てみると

#   modified:   error.log
#   modified:   style.css

思いっきりmodified(修正されましたよ)と書かれてましたね。
リポジトリにcommit済みであることを証明しています・・・
動画通りに進めていたら、error.logを作成後にgit statusを入れると

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   error.log
#   style.css

こんな感じになったのかなと思います。

疑問

でもそうなると、addcommitもしていないファイルにしか.gitignoreって適用できないの?と思ったので、自分のような状況でも.gitignoreを適用させる方法がないかちょっと調べてみました。(てかできなったらほとんど意味ないけど)

解決策

.gitignoreには大きな特徴があるみたいで、設置した際にすでにリポジトリに登録してあるファイルに対しては記述しただけではgitの管理から外すことができないみたいです。その場合、一度リポジトリから無視したいファイルを管理対象から外すという処理が必要ということ。
以下のコマンドでリポジトリから対象ファイルを管理対象から外すことが可能です。

$ git rm --cached 対象のファイル(今回だとerror.log)

ここで1つ注意点として、--cached絶対につけるようにしてください!
--cachedをつけないとリポジトリからファイルを丸ごと削除してしまいます!
--cachedをつけることで、リポジトリからファイルを削除せず、管理対象から外すだけとなるのでご注意を!

つまり今回の状況だと
1.リポジトリから管理対象を外すためにgit rm --cached error.logを実行
2.git statuserror.logが管理対象から外れているかチェック
-> deleted: error.logとなっていれば管理対象から外れている
3.git commitで管理対象から外したという変更をリポジトリに適用させる
4.git statusで変更が適用されていることを確認
-> deleted: error.logが消えていればおけ
5..gitignoreを作成
6..git statusで確認すると、.logファイルが表示されずに.gitignoreのみが表示されることがわかる。
7.gitの管理下にあるファイルにも適用させるために、.gitignoreaddcommitさせることでgit管理下ファイルにも適用させることが可能となる
-> ここは主に複数人での作業で全員に適用させたい場合などに用いる

もちろん.logのみではなくて、複数のファイルを同時に登録しておき、管理外にさせることも可能なので、その場合に応じて適応させると良いと思います。

最後に

.gitignoreを調べている間にいくつかの便利な情報を知ることができたので、忘れないうちに記載しておきます。

$ git ls-files

-> 現在gitが管理しているファイルおよびディレクトリを一覧で表示してくれる

$ git log

-> gitにコミットさせた履歴を一覧として表示(基本中の基本ですが、忘れてた)

$ git log --stat

-> gitにコミットした履歴と、ファイルの変更箇所も同時に表示

参考文献

先人様の知恵に感謝です。むしろこちらの方がより詳しく記載されています。
- http://sutara79.hatenablog.com/entry/2015/07/21/115842 (.gitignoreについて)
- http://qiita.com/yuuAn/items/b1d1df2e810fd6b92574 (.gitignoreについて)
- http://qiita.com/megu_ma/items/a438a71c84145f14d04e (git rm --cached)

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0