レンタルサーバー(XREA)で運用しているウェブサイトにGitを導入しようと思ったのですが、Gitについてちゃんと理解していないので今一度Gitについて大まかに復習したいと思います。
Gitとは、
Gitとは、分散型バージョン管理システムです。
簡単に言うとファイルのバージョン管理が簡単にできるツールです。
Gitでできること
- 古いバージョンに簡単に戻せる
- 新旧のファイルを一元管理できる
- 編集した履歴を複数人で共有できる
- 複数人で修正した部分を一つに統合できる
GitとGithubの違い
- Git:誰がいつどのように編集したかを正確に把握できるバージョン管理システムのこと。
- Github:Gitの仕組みと連携して、他のユーザーとやりとりしやすくしているWEBサービスの名称。
リポジトリ(repository)
リポジトリとは、ファイルやディレクトリを入れて保存しておく貯蔵庫のことです。Gitにおけるリポジトリは以下の2種類に分かれています。
- リモートリポジトリ:特定のサーバー上に設置して複数人で共有するためのリポジトリです。
- ローカルリポジトリ:ユーザーごとに配置される手元のマシンで編集できるリポジトリです。
clone
リモートリポジトリをまるごと自分のローカル環境(ローカルリポジトリ)に保存する機能
pull
リモートリポジトリに保存されているファイルの内、ローカルリポジトリ(あなたのローカル環境)に無いファイルや他のユーザーが更新したファイルのみをダウンロードする機能です。リモートリポジトリのファイルをすべて丸ごとダウンロードするクローンに対して、ローカルリポジトリとの差分のみをダウンロードして更新するのがプルになります。
つまり更新されてないファイルはダウンロードされない。
fetch
リモートリポジトリからファイルの最新情報を取得してくる操作のことです。共有されているファイル(リモートリポジトリ)の更新を確認したり、複数人の作業の擦り合わせのために使う機能といえます。プルとは違い、ローカルのファイルを更新することはありません。
リモートリポジトリのファイルをダウンロードし更新(プル)するのか、ファイルの更新があったかどうかを確認する(フェッチ)という点が異なります。また、前述のプルは、フェッチとマージを同時に行う機能といえるでしょう。
何も確認せずにプル(フェッチ+マージ)してしまうと、あなたがローカルで編集したファイルと同じファイルが更新されていた場合、エラーが出たりします。フェッチは、それらを未然に防ぎ、複数人で同じファイルを編集しているときでもお互い干渉しないようにするための機能というわけですね。
remote
リモートリポジトリを関連付けする
ワークツリーとインデックス
ユーザーが編集している作業中のディレクトリのことをワークツリーといいます。また作業場所であるワークツリーと、保存場所であるローカルリポジトリの間には、インデックスという中間領域が設けられています。
Gitの仕様上、ワークツリーで編集したファイルをコミットしたい場合は、一度インデックスに登録しなければなりません。編集したファイルをリポジトリへコミットする前にインデックスへ登録して仮置き(add)しておくようなイメージです。
ワークツリーからリポジトリに直接保存するとミスが増えますし、効率が良くありません。というのも編集作業を行うファイルは、一つだけとは限りませんし、編集した複数のファイルを一つ一つ確認してコミットするのは、作業的にも非効率ですからね。
コミット予定のファイルをインデックスに仮置きしておけば、後からまとめて確認した上でコミットできるので、編集したファイルのコミットし忘れなどを防ぐことができますし、余分なファイルを含めずにコミットできるというわけです。
branch
ファイルの編集履歴を分岐させて記録していく機能のことです。WEBサービスやソフトウェアの開発において、バグの修正や、機能の追加などのファイル編集作業は複数のユーザーが同時に行うことも少なくありません。並行して同時に行われる作業を正確に管理するためにGitにはブランチという機能が用意されています。これがGitのバージョン管理を効率的にし、間違いを減らすためにもっとも活かされている機能ともいえるでしょう。
merge
上記で説明した複数のブランチを一つにまとめて、完成形に近づけることをマージと呼びます。バグの修正や、機能の追加を行ったブランチがマスターブランチに統合されている部分のことですね。
add
編集したファイルをリポジトリへコミットする前にインデックスへ登録して仮置き(add)しておくようなイメージです。
addしたファイルだけがコミットされるので、addしていない編集途中のコミットしたくないファイルはコミットされない。
commit
コミットは、ファイルやディレクトリの編集作業をローカルリポジトリに記録するために必要な操作のことです。コミットを実行するとファイルを編集した日時を記録したファイルが生成されます。コミットを実行するごとにファイルが生成され、時系列順にならんで格納されるので、ファイルを編集した履歴やその内容を確認することができるわけです。
push
プッシュとは、ローカルリポジトリにあるファイルをリモートリポジトリに送信して保存する機能です。いわゆるアップロードに近い感覚ですね。
誰かが共有しているファイルをクローンして、ワークツリーで作業したファイルをインデックスに一度仮置き(add)し、まとめてローカルリポジトリに登録(コミット)する。ローカルリポジトリにコミットしたファイルを共有するためにリモートリポジトリにプッシュするのが基本的な流れになります。
rm
ファイルをインデックスから削除する
mv
ファイルやディレクトリの名前を変更する
reset
ファイルをインデックスから削除し、特定のコミットの状態まで戻す
status
ワークツリーにあるファイルの状態を表示する
show
ファイルの内容やコミットの差分などを表示する
diff
コミット同士やコミットと作業ツリーの内容を比較する
tag
コミットにタグを付ける、削除する、一覧表示する
log
コミット時のログを表示する
grep
リポジトリで管理されているファイルをパターン検索する
checkout
作業ツリーを異なるブランチに切り替える
rebase
コミットを再適用する(ブランチの分岐点を変更したり、コミットの順番を入れ替えたりできる)
config
現在の設定を取得、変更する
ここまで学んで気になった事
ここまで学んで気になった事は、
- 複数のbranchを作る事が出来るのか?
- branch間の移動方法
- 作成したbranchの閉じ方というか破棄の仕方かな?
まぁ、それは追々調べる事にしよう。
とりあえず、Gitの基礎勉強はこのくらいで良いかな。