皆さんこんにちは。
今回は文房具とは全く関係なく、IT系でチーム開発するときなどに使われる、「git」について私なりの理解の仕方を書いていこうと思います。
というのも、私自身いろいろありまして、今年の4月からgitに触れることが多くなりました。
この間まで先輩に教えてもらっていたのですが、最近ある程度まで理解できるようになったので、初心者なりにgitの理解の仕方を伝授出来たらなと思います。分かりやすくするために、「厳密に言うとそうじゃない」なんてこともありますので、この記事はあくまで参考程度に見てください。
この記事は、「gitが全く分からない方」が最後まで読み終えたら「言葉に表せないけどgitのイメージはつかめた」というところまでアシストしていきたいと思います。
前回の記事は見てくれましたか?
まだ見ていないという方は、まずはその記事を見てから戻ってきてくださいね。
「その他」の記事について
本編に入る前に、この記事を書こうと思った経緯をお話ししていきます。
私は多趣味なので、もともと文房具に特化したサイトを作るつもりはありませんでした。
しかし、Googleさんに気に入ってもらって、検索トップに入るにはある程度の専門性が必要らしいです。
そのために、まずは文房具のことだけを書いてきたのですが、テーマが一つだけだと書いている方も飽きてしまいます。だからといって、テーマを決めずに記事を書くと皆さんに読んでもらえないので、どうしようか考えたところ、基本的には文房具に関係する記事を書き、5つに1つは私の趣味や最近の出来事、気になっていることなどを記事にしようと決めたわけです。
なので、「その他」の記事は文房具の記事の箸休め程度に読んでくださればうれしいです。
趣味や好きなことの範囲って結構かぶっていると思うので、もしこの記事を文房具が好きで見てくださっているのであれば、「その他」の記事にも興味を持ってくれると信じています。
また、このカテゴリーでは私のことを知ってもらったり、このサイトに興味を持ってくれる事が目的なので、他の記事に比べて、広告も少なめにしておきます。(全部のページに共通して貼っている広告はお許しください。)
広告を減らす代わりに見やすさのクオリティも落ちるかもです。
前置きが長くなりましたが、本編どうぞ。
トップページは、カテゴリー別に記事が分かれていて、「その他」のカテゴリーが文房具に関係しない記事です。
gitとは
まず、gitとは何か。それは分散型バージョン管理システムです。
はい、言いたいことは分かります。もう嫌になりますよね。
でも待ってください、この記事を最後まで呼んでからまたここまで戻ってきてください。「分散型バージョン管理システム」という言葉がスッと入ってきます。
今の気持ちを忘れないようにして、最後に比較してみてくださいね。
「分散型バージョン管理システム」を簡単に言うと、「全部しってるよおじさん」です。
は?
こいつ何言うとんねんと思った方、正解です。この記事では、そのくらいラフに柔らかくgitを説明していきます。
ちなみに、この図見たことがあるでしょうか。
理解しなくていいので頭の片隅においといてください。
この後小学校の国語の授業を例にして、説明しますが、ここで理解してほしいのは本当にイメージだけです。
これだけを見て理解した気になるのは絶対にやめてください。
正直、正確に言うと間違っているという内容もあります。
gitの用語
他のサイトでgitについて調べた方は分かると思いますが、gitを説明するときに、「クローン」「pull」「push」「コミット」「マージ」「ブランチ」「リポジトリ」「master」「ローカル」「リモート」という言葉が出てきます。
これらをどう説明しようかと思ったときに私が思いついたのは「小学校の国語の授業」です。
ほら、もう分かりやすいでしょ!笑
まず、さっき出てきた言葉を小学校の言葉に変換していきます。
小学校用語 | git用語 |
---|---|
黒板をノートに写す | pull |
手を上げる | push |
自分の意見をノートに書く | コミット |
自分の意見を黒板に書く | マージ |
先生と生徒 | ブランチ(masterとその他) |
教科 | リポジトリ |
前回までのノート | リモート |
ノート・黒板 | ローカル |
ここからはこの表を元に説明していきますので、別デバイスで同じページを開くか、この表の写真を撮るかした方が良いですよ。
クローンについては後で解説します。
gitの流れと授業の流れ
さっき出てきたら用語を交えて、gitのイメージをこの見出しの中で一気に説明しますのでついてきてくださいね。
今から話す場面は、国語の授業で先生が生徒に問題を解かせる場面です。まず想像してください。
授業の流れ | gitの流れ |
---|---|
(先生) 前回までの内容を黒板に書く | (master) pullする |
(先生) 「とりあえず、ここまでノートに写してください」 | |
(生徒全員)「はーい」…ノートに写す | (その他) クローンする |
(先生)「じゃあここの問題を一人で考えて、ノートに書いてください」 | (master) あとは知らない。ブランチを分ける。 |
(生徒全員)「はーい」…考えてノートに書く | (その他) コミットする |
(先生)「はい、じゃあ発表してください。」 | |
(生徒)「はーい」…手を上げる | (その他) pushする |
(生徒)「○○です。」 | |
(先生)「正解!」…黒板に書き込む | (リモート・master) その他のブランチをマージする |
(チャイム)キーンコーンカーンコーン | |
次の教科へ | リポジトリを切り替える |
誰がどこに何を書いているのか、それをすべて知っている「全部知ってるよおじさん」がgitです。
一番わかってほしいのは、その他のブランチがクローンしてからマージするまで、masterはその他のブランチに一切関わらないということです。
分かったかな?…
もう一度言いますが、ここまでを見て理解した気になるのは絶対にやめてください。
ここまではイメージをつかんでもらいたかったので、正確に言うと間違っている内容も含まれています。
素直に飲み込んでいいのはこの下からです。
一般的な言葉で表現
さっきは分かりやすくするために、めちゃくちゃ崩した表現にしましたが、逆に分かりづらい方もいたかもしれないので、もう少し一般的な表現にします。
新しい用語も出てきます。
単語だけではなくしっかり解説します。
一般的な表現 | git用語 |
---|---|
データを保存しているフォルダ(ファイル) | リポジトリ |
PCに実在するファイルでwindowsならエクスプローラーとかに入ってるもの、リモートリポジトリのクローン | ローカルリポジトリ |
エクスプローラーにはなく、特定のサイトなどからしかさわれない、仮想のファイル(クラウドなどに似てる) | リモートリポジトリ |
リモートリポジトリを実在するものとしてコピーする。リモートリポジトリとローカルリポジトリはpullした時に同期される。 | クローン |
誰が操作するのか masterは大元になる操作者 ブランチごとに別軸で操作していき最後にmasterにマージする | ブランチ |
リモートリポジトリの変更履歴をローカルリポジトリに反映する | pull |
リポジトリに変更内容を反映する | コミット |
pullとは反対に、ローカルリポジトリの変更内容をリモートリポジトリに記録する | push |
別ブランチの変更履歴を現在のブランチに取り込む | マージ |
図で表すと
初めの方でお見せしたこの図を使います。
先ほどの用語も使って説明していきます。
まず、色に関わらず丸印で表されているのは、そのタイミングで何かしらの変更があったこと示していて、変更内容が書かれています。
そして色の違いですが、これはブランチの違いです。
今は見やすくするために赤の横線を引いてありますが、基本的には赤の横線が無いので分かっていてください。
同じ段にあるのは同じブランチの操作です。
最初と最後にある青丸のラインがmasterのブランチで、緑は別のブランチ(説明のためgreenというブランチにします)、オレンジはまた別のブランチ(orangeとします)となっています。
流れの説明をする前に、なぜブランチを切り替える必要があるのか、どのようなときに切り替えるのかを説明します。
どのようなときに切り替えるのかですが、チームで何かを作る時です。
例として、スマホを作る時を考えてみましょう。
スマホを作るときに、まず外観を作って、次にシステムを作って、さらにアプリを作って、ていう風にするとめちゃめちゃ効率悪いですよね。やっぱり、何グループかに分かれて、複数の作業を同時に進めたいですよね。そんな時に、ブランチを切り替えます。この例だと、「スマホ」というブランチがmaster、その他に「外観」「システム」「アプリ」というブランチがあるという感じです。
ここから流れを説明します。
使い始めるときのブランチはmasterになっていて、同時進行で進めたい作業がある時はブランチを切り替えます。(図でいうと、紫の矢印です)この時点で、masterとgreenまたはorangeは完全に分かれているので、それぞれ作業することができます。
そして、それぞれの作業が終わった後コミット&pushします。(図の丸がついている部分)コミットは自分のブランチに変更履歴を記録することで、pushはその記録をmasterに教えることですが、これらを「コミット&push」として同時に行う事が多いです。
今からpullについて説明します。
オレンジの丸のタイミングを考えてください。このとき、既にmasterとgreenからブランチを切っているので、orangeはブランチを切ってから今まで、masterとgreenでどんなことがあったのか分かりません。それを知るためにpullをします。pullをしないと、リモートリポジトリで起こった変更がローカルリポジトリに反映されません。
最後にマージについてです。
今まで複数人で行っていた作業をmasterに統合します。(図のピンク矢印)
こうすることで、greenとorangeで行った変更を反映できます。
pushとなにが違うのかといいますと、pushはmasterに変更内容を知らせるだけ、マージはその変更内容を反映させます。
まとめ
なんとなく分かってくれたでしょうか。
gitは使っていかないと中々覚えられないので、ここではなんとなくのイメージや単語がどのような操作をしているのかさえ理解していただけたら大丈夫です。
なんとなく理解出来たら、他のサイトを調べてみてください。今までより書いている内容がわかると思います。このサイトと言っていることが違うのであれば、恐らく私の方が間違いです。
意味の分からない表現や間違った表現があったかもしれませんが、最後まで見ていただきありがとうございました。
このサイトでは、主に文房具について記事を書いているのですが、5記事に1回このような文房具に関係ない記事を書いています。よければ他の記事も見ていってください。
コメントなし