【gitをソフト開発で使いこなそう!:第9回】ローカルリポジトリとリモートリポジトリ
今回からGitHubの使い方について解説していきます。前回でも話した通り、これが使いこなせるようになると自分のソースコードを全世界に発信出来るようになります。(これ以外にもたくさん機能があります。)
どうやってコードを共有する?
自分で作ったコードを自分だけで管理するなら、今まで(第1回~第8回)やってきた内容で問題ありません。
しかし、自分が作ったコードを他の人と共有したいとしたらどうでしょうか。
また他の人と一緒にコードを編集したいとしたらどうでしょうか。
リモートリポジトリとローカルリポジトリ
これをローカルリポジトリとリモートリポジトリというものを使って解決します。
第1回でも軽く解説しましたが、ここでもう一度用語について解説します。
リポジトリとは、ファイルやファイルの変更履歴をまとめたものを指します。
ローカルリポジトリとは、自分のPC上で管理しているリポジトリのことです。第1回~第8回までこのリポジトリを操作してきました。
リモートリポジトリとは、ネットワーク上で管理しているリポジトリのことです。
厳密に言うとリポジトリは、何らかのデータを保管する場所を指す用語です。
「データの保管場所」という広い意味ですから、gitだけでなく様々な場所でリポジトリという言葉は登場します。先ほど説明した意味はあくまでもgitでのリポジトリを指したものです。
共有する具体的な手順
このリモートリポジトリとローカルリポジトリを使ってgitでは、どのように変更を共有するのでしょうか。
次のような場面を考えてみましょう。
AさんとBさんが同じソフトを一緒に開発しています。
ここで、Aさんがローカルリポジトリに変更を加えたとします。
Aさんはこの変更をリモートリポジトリに反映します。
Bさんは、リモートリポジトリの変更を自分のローカルリポジトリに反映します。
これでAさんの変更がBさんにも共有されました。
何でこんなことするの?
先ほどはリモートリポジトリと、ローカルリポジトリを使って変更をお互いに共有しました。
ですが、ただ共有するだけなら下の図のように、全ての履歴を一つのリポジトリで管理するようにしてもいいのではないでしょうか。
手順もシンプルですし、こちらの手法の方がいい気がします。
ですがこの手法には次のようなデメリットがあります。
- インターネットに接続されていないとコミットやブランチ作成などが出来ない
- リポジトリが一つ壊れるだけで全てのデータが失われてしまう
- 誰か一人の操作が全体に影響を与えてしまう
デメリット1
最初に紹介した方法を使えば、インターネットに接続されていなくてもコミットやブランチ作成などを行うことが出来ます。
インターネットに接続されていない時に行った変更は、後で一気にリモートリポジトリに反映させることが出来ます。
デメリット2
最初に紹介した方法であれば、もしリモートリポジトリが壊れたとしてもローカルリポジトリにデータが残っているため、すぐに復旧することが出来ます。
デメリット3
例えば誰かが手違いで、リポジトリを破壊してしまったとしましょう。(間違ってブランチを消してしまったなど)そうすると、全員そのリポジトリを使っているため全ての人が影響を受けてしまいます。
最初の方法であれば、ローカルリポジトリを操作してからリモートリポジトリに変更を反映するためこのような問題は起きにくくなります。
本文では、最初にローカルリポジトリとリモートリポジトリを使って管理する方法と一つのリポジトリだけを使って管理する方法を紹介しました。
これらの方法には、名前が付いておりそれぞれ分散バージョン管理システム(DVCS),集中バージョン管理システム(CVCS)と呼ばれています。
gitは分散バージョン管理システムですが、Subversionのような集中バージョン管理システムもあります。
GitHubって何だ?
一言で言い切るのは難しいですが、大雑把に言うならソフトウェアのソースコードを公開出来るWebサービスのことです。
ただソースコードを公開するだけなら、GoogleDriveなどのファイル共有サービスを使うだけでも問題ありません。しかしGitHubの場合他の人からのソースコードの編集を受け付けたり、逆に他の人が公開しているソースコードの編集を求める機能などソフトウェア開発に便利な機能がたくさん備わっています。
「GitHub」という名前の通り、gitをソースコードの公開に使うことが出来ます。
上の説明を聞いても「GitHub」が何なのかいまいちピンとこないと思います。実際にGitHubを使うようになればだんだん分かってくるでしょう。
次回予告
次回は、具体的なGitHubの使いかたについて解説していきます。
う-ん、よく分からん!
この記事を読んで、疑問に思うことがあったときは、気軽にコメント欄や私のTwitterから質問してください。(すぐに答えを返せるとは限りませんが。)
参考文献
Pro Git
git,GitHubを使うにあたって必要なコマンドの使い方が詳しく解説されています。この連載を読んで分からないことや詳しく知りたいことがあったときはまずProgitを読んでみるといいでしょう。 git-scm.com
分散型と集中型バージョン管理
分散型バージョン管理と集中型バージョン管理のデメリットとメリットについて書かれています。