
先生!よく Git って言葉を見かけるけどなんだわん?

Git はファイルの変更履歴を記録できるバージョン管理システムです!

GitHubとは何かちがうのかにゃ?

良い質問ですね!そこらへんも含め Git の基本について学んでいきましょう!
こんにちは!あっきーです!
本日は Git についての記事です!
今後チーム開発などをする人たちにとって Git は絶対に欠かせない知識だと思います。
最近では GUI の発展で直感的に Git を操作できるようになってきましたので基本概念さえ押さえておけばあとは触っていくうちになれるものだと思います。
なんて言ってますが、僕もまだ経験浅いので偉そうなこといえないです(笑)
最近学んだことをまとめたかったので一緒に記事にしました。これから Git を始める人は参考にしてください!
バージョンについて
冒頭できつね先生が「Git はファイルの変更履歴を記録できるバージョン管理システムです!」と説明しています。
では、バージョン管理とはなんでしょう?
簡単に例えるとアップデートのようなイメージがしっくりくるかと思いますがもうすこし詳しく説明していきます。

Ver.1.0の1の部分をメジャーバージョン、0のほうをマイナーバージョンといいます。
画像のようになにかしらアプリを公開されると「ver.1.0」のような文言がよくつきますよね。
これがバージョンですがなぜ必要なのでしょうか?
例えば、、
・アプリに新機能を追加したいとき
・バグを修正したいとき
こんなときに公開された「Ver1.0」の環境でアプリの編集を行うでしょうか?
ぜったいしないですよね。
ですのでアプリを公開しながら本番環境には影響しない非公開環境が必要になりますね。
このときの作成した非公開環境を「ブランチ」といいます。
ブランチで編集を加え、予定した編集を終えた段階でバージョンをひとつあげる。
これを繰り返していき公開環境に実装を反映する段階になったらブランチを戻します。
つまり、バージョンはいつバージョンアップを行い、どんな変更を加えたか。
ということを明確に記録するためのもの。というイメージです。

公開環境にブランチを反映させることを「マージ」というぞ
ブランチを作成してバージョンアップをおこなうことは並行世界を移動することです。
リーディングシュタイナー発動しましょう。そしてシュタインズ・ゲートを目指すのです!
Git をつかう3つのメリット
上記のバージョンの管理を Git で行うとどのようなメリットがあるのでしょうか?
一言でいうと開発で不便なところ、
通称「開発あるある」を Git で解決できることです。
思いつくメリットを書いていこうと思います。
バックアップ管理が楽でいつでも過去のバージョンに戻せる
手動でバックアップを作成しているといつのまにかものすごい量のファイル数になっていることありませんか?
いつ、どこで、どんな変更をくわえたかわからなくなり結局もとに戻せず最初から作り直した。
そんな経験ありませんか?
そんなときに Git で解決できます!
複数人での同時修正でもファイルの整合性がとりやすい
同じファイルに対して、複数人で修正を行っているとだれが、どこを編集したかがわからなくなり1人ずつ聞いて回るなんてことありませんか?
Git を使えば、、
修正した意図を全体で簡単にシェアできる
例えばコードの修正などを引継ぎもなくコメントアウトもなく、しかも前任の人がもう退職済みとかだったらどうでしょう?
コードを遡るのがとてもしんどいですよね。
Git なら
Git と GitHub
バージョンの概念を個人やチームで管理していくシステムのことを Git といいます。
混合しがちな GitHub は Git を Web 環境で利用することでより開発の効率をあげるための Web サービスのことをいいます。
Git をより使いやすくするツール
GitHub も1つですが、ほかにも Git を効率よく利用するためのアプリがあります。
正直コマンドで Git を扱うのは結構しんどいです。
GUI で使いやすいサービスはいろいろありますので積極的に取り入れていきましょう!
Bitbucket
機能としては GitHub とやることはほぼ同じです。
ですが決定的な違いがあります。
GitHub→基本的に公開アカウントで共有
Bitbucket→非公開アカウントで少人数で共有
有料プランにすれば GitHub も非公開にできますが、無料の場合は上記の違いがありますのでケースバイケースで使い分けるのがベストですね!
SourceTree
ローカル環境でバージョンの変更を行えるソフトです。
Git の GUI ですね。
各々のサービスの使い方としては GitHub, Bitbucket は共有するソースをの大元を保存するところ。SourceTree で Git のバージョン管理を行うところ。
といったところでしょうか。
Git の基本用語
ここで Git でよく使う機能についてざっくりと説明します。
基本的な機能としてはここら辺を押さえておけばまずは大丈夫かなというところを説明していきます。
リポジトリ
Git を使うときに最初に行う作業がリポジトリをつくる作業です。
リポジトリとは過去の記録を保管しておく貯蔵庫のようなものです。
リポジトリにバージョンごとのソースファイル、その他にも画像やテキストデータなどさまざまなデータを保管しておき、それをもとにバージョン管理を行い、いつでもバージョンを戻したりすることが可能になります。
手元のパソコン内のリポジトリをローカルリポジトリ、Web 環境でのリポジトリをリモートリポジトリといいます。
ローカルリポジトリを SourceTree で管理、リモートリポジトリは GitHub, Bitbucket で保管します。
Git は各々のパソコン内にローカルリポジトリをもち、好きなタイミングでリモートリポジトリにコミットします。これを分散型のバージョン管理といい3つメリットがあります。
1.オフラインで仕事ができる
2.他人の環境に影響がなく実験ができる
3.1つリポジトリが残ってれば復元がしやすい
コミット
変更したファイルをリポジトリに反映させることをいいます。
先ほどのバージョンの概念で考えるとこのコミットを繰り返すたびにバージョンが1.0→1.1のようにあがっていくイメージです。
チェックアウト
リポジトリからデータを取り出す作業のことをいいます。
チェックアウトを行うことで、リポジトリに保管されたバージョン内で特定の時点に戻すことができます。
他にも方法はありますが基本的にはチェックアウトを使うことが多いかと思います。
プッシュ
ローカルリポジトリでコミットした状態をリモートリポジトリに反映させることをいいます。
イメージとしてはアップロードのように考えていただければいいかと思います。
プル
他の人が行ったプッシュを自分のローカルリポジトリに取り出す作業のことをいいます。
イメージとしてはダウンロードのように考えていただければいいかと思います。
プッシュとプルはローカルリポジトリで行うコミットとチェックアウトとほぼ同義です。
このようにリモートリポジトリに複数人でプッシュ、プルを繰り返すことで常に最新のリポジトリの状態で個人のパソコンで作業をすることが可能になります。
【図解】全体像を把握しよう
いままで説明した Git の機能を図でまとめましたので参考にしてみてください。
さいごに
最後まで読んでいただきありがとうございます!
今回は概念の説明をしましたので、実際の GitHub の扱いなども今後記事にしていこうと思いますので引き続きよろしくおねがいします!