ローカルリポジトリとリモートリポジトリ
- 操作しているデバイスの中にあるリポジトリをローカルリポジトリと呼ぶ
- クラウド上にあるリポジトリをリモートリポジトリと呼ぶ
リモートリポジトリとしてよく利用されるサービス
- GitHub
- GitLab
- Bitbucket
- Backlog
リモートリポジトリとのやり取りでよく使う言葉
- クローン
- リモートリポジトリからコピーしてローカルにリポジトリを作る
- フェッチ
- プッシュ
- アップロード的な作業
- プル
- ダウンロード的な作業
- プルリクエスト
ローカルリポジトリとリモートリポジトリの違い、そしてリモートリポジトリについて、ということでご紹介します。画面を共有します。
はい、ここまで、今までですね、Gitいろいろ操作してきたんですけども、その全ての作業は、自分自身のパソコンの中で行いましたね。
この自分のパソコンの中にあるリポジトリのことをローカルリポジトリというふうに呼びます。それに対してクラウド上にあるもの、みんなと共有して作業を行うもの、例えばオープンソースであれば、広く多くの一般の方と一緒に共有しますし、仕事であれば、そのチームのプロジェクトメンバーの方とそのリポジトリを共有するために使うもの、なにかしらね、共有がないと自分の所で作業したものを共有する術がありませんからね。そのためにあるのがリモートリポジトリというものになります。
具体的にはこういう形です。イメージとしてね。
それぞれのローカルリポジトリで、Aさんがやってるもの、Bさんが入ってるもの、そして私がやってるもの、というものがあって、それぞれはリモートリポジトリという、ここに集めてそこからまた新しく最新版をダウンロードしたり、新しく変更したものをこちらに共有したり、という形でやり取りを続けていくという流れになります。
リモートリポジトリとしてよく利用されるサービス
で、ですね、このリモートリポジトリはもちろん、サーバー上にそのエンジニアさんが独自に立てることも可能なんですが、昨今の制作においては既にサービスとして提供されているものを使うことがよくあります。その中で有名なものでよく使われるのがこの4つかなと思って挙げました。
GitHub とGitLabと Bitbucket とBacklogという内容になります。一つぐらいは名前が聞いたことがあるでしょうか。ま、特に GitHub は有名ですよね。オープンソースのものも、プライベートな仕事のものも GitHub 上で、リモートリポジトリとしてホスティングしておいて、そこから作業を続けるという事は本当に本当によくあります。
名前が似てるんで、とてもとても分かりにくいんですけども、GitHub にしろGitLabにしろ、それは「Gitを利用したリモートリポジトリを提供してくれるサーバー」ということになります。この GitとGitHub、 GitとGitLabは、同じGitを使っていますが、違うものであるということについては、何となくでいいんで理解しておいてください。
このどちらでも、ソフトウェアとしてバージョン管理するためのツール / ソフトウェアが Git であり、それをリモート上でクラウドとして使いやすく、サービスとして提供してくれているのが、リモートリポジトリ・サービスとしての GitHub やGitLab、また Bitbucket というものになります。
Backlog については少し毛色が違って、基本的にはプロジェクト管理ツールなんですけども、その中において、その一部の機能としてリモートリポジトリを提供してくれるという機能がありますね。ですので、Backlogの中でリモートリポジトリを使うということもよくあるかもしれません。ここは、現在ですね、お仕事されているチームによってリモートリポジトリの場所が違うかと思いますので、そちらを利用いただければと思いいます。
リモートリポジトリとのやり取りでよく使う言葉
では、リモートリポジトリでよく使う言葉ですね。もともとGitでは、コミットそしてステージ、あとリポジトリっていう言葉がありますよってことを伝えしましたけども、今度リモートリポジトリとのやり取りの時には、大体1、2、3、4、5個の言葉を使うことが多いかと思います。
1つ目はクローン、2個目がフェチ、そして3個目がプッシュ、4個目プル、そして5つ目がプルリクエストという事になります。まずこの言葉から簡単に見ていきましょう。
クローン
クローンはリモートリポジトリから、その Git の変更内容ごとダウンロードする、コピーするようなイメージですね。リモートリポジトリからコピーしてローカルにリポジトリを作る。これがクローンです。
要は、この一番最初に作業するときに、何もないですよね。ただ、他の人は色々と、もう既に、作業を続けられてるかもしれません。あとからのプロジェクトで入る場合には、既にリモートリポジトリとして、多くの方がコミットしたものがあるでしょう。そのコミットの履歴を全部込み込みでゴッソリとダウンロードすること、一番最初にリモートリポジトリからズドっとコピーすることをクローンという風に呼びます。
プッシュとプル
そしてですね、分かりやすいところで言うと、プッシュとプルですね。
プッシュは、その、今度はクローンしました、そして自分がそこの中で作業してコミットをしました、コミットをしました。そうすると、コミットしたという履歴と、その時に起こったファイルの変更ということで、その2つ、変更履歴込みのファイルがありますね。このすべてをアップロードする…、リモートリポジトリ側に、その変更の履歴でアップロードする事をプッシュと言います。プッシュ、まぁ、アップロードに近いものと思っていただいていいかと思います。
それの反対で、他の人も色々プッシュします。Aさんもプッシュします、Bさんもプッシュします。そして自分は後からちょっと作業をしようかなと思った時に「Aさん、Bさんのことも先に取り込みたいな」と思った時にダウンロードする必要がありますね。他の人の作業を、変更の履歴込みで自分のローカルリポジトリに取り入れる必要があると。そのことをプルと言います。プルはダウンロードに近いもの、という風に思っていただければと思います。ここ(めがねさんのレジュメ)ではちょっと、簡略化してそのままの名前で書きますね。
アップロード的な作業ね。で、プルはダウンロード的な作業となります。
フェッチ
そしてフェッチ。ちょっとフェッチは概念的に分かりにくいんですけども、プルはそのままファイルを持ってきてしまうんですが、そのプルをする前の段階で「リモートリポジトリにおいてどういう状態になっているか、その変更の状態をまずは認識して、Git上にはダウンロードするけども、ファイルとしてはダウンロードしない状態」をフェッチっています。
なので、色々と A さん B さんが何をしてるか分からない、でも、自分は自分の作業進めている時に、まずはフェッチしてみて、Aさんと B さんどういう作業してるかな?というの確認し、問題なければプルする、何かしら問題がある場合は、それが回避するように作業してからプルする、といったようなことを行います。
後々分かってくると思うのでフェッチはなんとなく、そのリモートリポジトリの状態を確認できるんだな、という風にご理解いただければと思います。
プルリクエスト
そして最後、プルリクエストですね。何かプルリクエストって、ちょっとこう、ポジティブなイメージと言うか、できたらエンジニアさんになった!っていうような気がしますけども、プルリクエストというのは、今度は自分がコミットして、コミットして変更の履歴を上げました、プッシュしました、その時にその実際の本体が、そのあなたが変更したものを取り入れていいのかどうかを確認し、それを確認した上で「じゃあ取り込みます」ということでプルリクエストを受け付けて、それを受け入れるという内容になりますね。ここね、一言で喋ると難しいんで、後でプルリクエストについてはしっかりとご紹介したいと思います。
オープンソースとかでよく使うんですけどね、後、仕事だとマージする時のレビューに使うでしょうか。
何かしら初学の人がコミットしたものをそのまま本体に取り込むと、何かしらミスが起こるかもしれません。そういった時に上司の方や、上級のプログラマーの方が、その初学の方のプログラムの変更点を見て、もしくは同僚同士でテストをし合うような形で、その中身を見て、その修正のコードが問題ないかを確認し、問題なければ本体に取り込む、そのことを「プルリクエストを受け入れる」って言う風にいますけども、そのために、要は「本体側さん、プルしてくださいね」とお願いするという意味で、プルリクエストという形の名前になっています。
このプルリクエストだけは、Gitの機能ではなくて、Gitを提供するリモートリポジトリ側が設定しているサービスということになるんですけども、もう、ここまで言うとちょっとごちゃごちゃとしますからね、これは順番に作業をやりながら覚えていただければと思います。
まずはクローンっていうのがリモートリポジトリから自分のローカルにリポジトリをドーンとコピーしてくる事、そしてプッシュとプルはその中で変更したものをアップロードしたりまたクローンした後に、また変更が起こったリモートリポジトリの内容をダウンロードしたりする事を、プッシュとプルでやり合う、という事だけを覚えといていただければと思います。