Git 勉強その②
Git勉強その②
の続きです。
レポジトリの取得
レポジトリとは
その①で簡単に説明しましたが、Gitによるバージョン管理をしているもののまとまりです(ファイル・ディレクトリなどのデータを含む)。
さて、レポジトリの取得ではすでにあるレポジトリ(サーバー・GitHubなど外部サイト)から取得する場合と自分でレポジトリを作る場合があります。
自分でレポジトリを作りGitの管理下に置く
Git Bashなどの端末で
git init
とコマンドを打つとそのディレクトリがGitの管理下に置かれます。
ただこれではまだそのディレクトリの中にあるファイルがコミットされていないので(修正済みの状態)
ステージ済み→コミット済み
この流れをコマンドで打つ必要があります。
git add . // .は全ファイル・フォルダを指す。git addによってステージ済みになる git commit -m "commtent" // ステージ済みのものをコミット済みにしている
git commit
のところのmがオプションとしてつけられているのが疑問に思った方もいると思います。これはコミットメッセージを次の"“の中の文字列で表す、という意味です。
コミットメッセージは重要です。コミットメッセージによってほかの人がどういったコミットをしたのか把握するからです。
すでにあるレポジトリからローカルにレポジトリをコピーしてGitの管理下に置く
サーバー・Git Hubですでにあるレポジトリを自分のパソコンの中にコピー(クーロン)していきます。
git clone URL
ここでいうURLとはhttp://hogehoge.com/
といった見慣れたものよりもID@ドメイン名://パス
といったSSHでサーバーを扱うときに使っていく形式が多い気がします。
レポジトリに新規ファイルの追加
上の2つの方法のいづれかでレポジトリができているとします。このレポジトリに新しくファイルを生成する(又は移動して持ってくる)とします。
vim hogehoge.html // index.htmlを生成する mv ~/Downloads/hogehoge.css ./ // hogehoge.cssを新しくレポジトリに持ってくる
そのファイルはまだレポジトリに保存されているわけではありません。修正済み・ステージ済み・コミット済みのいづれでもなくて、追跡されていない(untracked)ファイルとして存在しています。なのでこれを追跡されているようにする必要があります。
vim index.html mv ~/Downloads/hogehoge.css ./ git add index.html hogehoge.css git commit -m "new file index.html hogehoge.css"
ファイルの状態確認
git status
でできます。パターンとしては以下のようになっています。((git diff
やgit diff --cached
も使えますが省略しました。))
通常時
通常時とはレポジトリに全ファイル・フォルダ保存されていて、コミット済みであることを指しています。
$ git status On branch master nothing to commit, working tree clean
コミット済みファイルを変更した時
$ vim index.html hoge@hoge hoge ~/hoge (master) $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: index.html no changes added to commit (use "git add" and/or "git commit -a")
index.htmlが変更された(modified)ということが書かれていますね。
変更済みファイルをステージ済みにした時
$ git add index.html hoge@hoge hoge ~/hoge (master) $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: index.html
コミットされて(committed)はいないけれどステージ済みになっていることを示しています。
ステージ済みファイルをコミットした時
$ git commit -m "index.html modified meta changes" [master 8eab8c1] index.html modified meta changes 1 file changed, 1 deletion(-) hoge@hoge hoge ~/hoge (master) $ git status On branch master nothing to commit, working tree clean
最初のパターンと同じになりましたね。
新しいファイルを追加した時
追跡されていない状態が生まれるってやりましたね。
$ vim hoge.txt hoge@hoge hoge ~/hoge (master) $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) hoge.txt nothing added to commit but untracked files present (use "git add" to track)
追跡されていない(Untracked)ファイルがhoge.txtであることが書かれています。
この後git add
とgit commit
してあげればコミット済み(しかも追跡されている)ファイルとなります。
Gitの管理下に置きたくないファイル・フォルダがあった時
ディレクトリの中でもGitの管理に置きたくないファイルがあると思います。
例えばlogファイルやGulpなどによって自動的に生成される静的ファイルなどやモジュールなどです。これらを除く方法として.gitignoreというファイルを生成すればいいです。そしてそのファイルの中身に以下のように書くとします。
*.log
これによってlogという拡張子を持つファイルが管理下になるのを防げます。ただし、コミットされているlogファイルに対して.gitignoreでファイル*.log
と書いてもすでに
管理下にあるためGitの管理下から外すことはできません。
コミットメッセージ
今まではgit commit -m "comment"
とすることでステージ済みのデータをコミットしていました。ここでmオプションをとってみましょう。
すると、エディタが立ち上がります。これはその①でも書いたようにvimがデフォルトですね。ただmオプションつけてやれば基本的にいいと思います。
ステージ済みとかメンドクサイ
git add
が面倒だという人もいると思います。その時はgit commit
にaオプションを付ければいいです。個人的には好きじゃないです。
ファイル削除
git rm
を使いましょう。ただ単にrm
だとそのファイルがステージ済みでなくて変更済みとして扱われます。
git rm hoge.txt // これでhoge.txtが削除されたファイルとしてステージ済みになる git commit -m "hoge.txt deleted"
Git管理下に置きたくないけどファイルは取っておきたい!
.gitignoreを使いましょう。ただ、git init
した後ですでにコミット済みであった場合は下のようにします。
git rm --cached hoge.txt git commit -m "hoge.txt deleted in repo"
ファイル名の変更・ファイルの移動
レポジトリの中でmv
コマンドを使いたいときはgit mv
を使いましょう。
git mv hoge.txt hogege.txt git commit -m "hoge.txt renamed"
さて、今回はこれで以上です。公式ドキュメントはやりごたえありますねー。とても面白いです。