最近、GitHubでWordPressテーマ「4536」の管理を始めました。
バージョン管理が楽で、変更履歴も簡単に残すことができて、「これがGitHubの魅力か〜!」なんて感動してたんですが、実は、1番感動したのは特定ファイルやフォルダの除外機能でした。
addコマンドで全ファイルを追加するデメリット
GitHubはローカルリポジトリをリモートリポジトリに反映させる(取り込む)ことでファイルを管理する仕組みになっているんですが、このローカルリポジトリにファイルを追加する時、ファイル名を指定せずにすべてのファイルを追加することも多いと思うんですね。
例えば、functions.phpとstyle.cssを修正した場合。
git add functions.php style.css
と、ファイル名をすべて指定するよりも、
git add .
と、すべてのファイルを追加した方が簡単ですよね。
なぜなら、すべてのファイルを追加しても、コミット履歴には変更されたファイルの履歴だけ残るので結果的にやっていることが同じになるからです。
ただ、この方法を使うと困るのが「開発時にしか必要ないファイル」や「コアファイルのような編集しないファイル」がある場合。
例えば、webpackというツールを使うと「node_modules」というフォルダが生成されるんですが、これは開発時のみ必要で、いつでも同じものがインストール可能で、めちゃくちゃ重いので、GitHubで管理する必要がないフォルダなんですね。
もちろん、管理してはいけないわけではありませんが、全体のファイルサイズも無駄に重くなりますし、管理する意味はまったくないわけです。
そこで活躍するのが冒頭でお話しした「除外機能」。
以下、この機能の使い方などを紹介します。
【除外方法】.ignoreファイルを作成して除外ファイルやフォルダ名を記載する
除外機能と言いましたが、そういったコマンドがあるわけではなく、やることは「.gitignore」という不可視ファイルを作成して、その中に除外したいファイルやフォルダの名前を記載するだけです。
(豆知識:「Git」で「ignore(無視)」するからgtiignoreというファイル名です)
.gitignoreファイルの作成方法
.gitignoreファイルは不可視ファイルなので、コードエディターで作成するか、ターミナルで以下のコマンドを入力します。
touch .gitignore
作成する階層(場所)は1番上で、例えば、WordPressテーマならfunctions.phpやstyle.cssなどのファイルがある階層です。
除外ファイルやフォルダ名を記載する
後は、その.gitignoreファイルに除外したいファイルやフォルダの名前を記載するだけです。
例えば、先ほど登場した「node_modules」のフォルダを除外する場合は以下のようになります。
node_modules/
※フォルダを除外する場合は最後に「スラッシュ」を付けます。
これで、node_modulesのフォルダは除外対象になったのでaddコマンドを使っても追加されなくなります。
他にも除外したいものがあれば、以下のように改行して記載します。
node_modules/
ignore-file-1
ignore-file-2
ignore-file-10
.gitignoreファイルをリモートリポジトリに反映
後はこの.gitignoreファイルをリモートリポジトリに反映させればOKです。
git add .
git commit -m 'create .gitignore'
git push origin master
リポジトリにあるファイルを除外する
.gitignoreファイルでの除外は、削除ではなく「無視」なので、すでにリポジトリにあるファイルは除外対象にはなりません。
ですので、リポジトリにあるファイルやフォルダは以下の手順で除外します。
.gitignoreファイルを作る
まず、先ほどと同じように.gitignoreファイルを作成して除外するものを指定します。
※やり方は先ほどと同じなので割愛。
キャッシュの削除(管理対象から外す)
次に、「rm」コマンドと「–cached」オプションを使ってすでにリポジトリにあるファイルを削除します。
※–cachedオプションがないとファイル自体が削除されるのでご注意ください。
例えば、不要ファイルの代表格に「.DS_Store」があります。
このファイルをリポジトリから削除する場合は以下のコマンドを入力します。
git rm --cached .DS_Store
リモートリポジトリに反映する
.gitignoreファイルに除外するものを記載して、ローカルリポジトリの管理対象からも外したので、この状態でリモートリポジトリに反映すればOKです。
addしてcommitしてpushしてください!!
フォルダの削除や削除対象が複数ある場合
リポジトリから複数のファイルを削除したかったり、ファイルではなくフォルダを削除したい場合は「-r」オプションを使います。
git rm -r --cached .
これで、すべてのキャッシュが削除されるので、その後はaddしてcommitしてpushしてリモートリポジトリに反映させればOKです。