SEワンタンの独学備忘録

独学した内容や資格試験に対する取り組みの備忘録

【Git】Git初心者の入門学習-概要編-

入門として概要レベルでまとめる。続くかもしれないしあまり続かないかもしれない。

学習を始める前に

参考書籍

Gitの学習を始めるにあたって以下の入門書を一冊購入しました。なので、学習内容などはこの本を参考にしているところが多いです。
漫画形式なので、非常にとっつきやすく楽しく読み進められました。内容については入門としては十分なことが書かれているのだと思いますが、Git自体をまだそこまでわかっているわけではないのである程度分かってきたら再評価するものなのかもしれません。

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

わかばちゃんと学ぶ Git使い方入門〈GitHub、Bitbucket、SourceTree〉

以下、わかば本。

新しい技術を学ぼうと思ったら個人的には、まずは書籍の一冊購入を推します。
良書と言われるものはやはり分かりやすく体系的にまとまっているため、全体を俯瞰しながら学習ができます。そうすると、その書籍に載っていない分からないことが出てきても調べられます。穴ぼこだらけで学習を進めると分からないところが分からなくなりがちですから
後はモチベーションのアップになりますしね。

どの程度知ってたのか

Gitはバージョン管理システムだってことは知っていましたが、それ以外はほぼ全く知らなかった。
GitHubはみんなで共有ってことぐらい。
もちろん業務での使用経験もありませんでした。

ちなみに業務ではSubversion(SVN)の使用経験はあります。

なんで、何を学ぶのか

技術に敏感なエンジニアたちはみんなGitやGitHubを使用している印象があり、興味があった。
現在の現場では使用していないが、別の現場に移ったときなどに使ったことないから知りませんという状態にしたくなかった。

特に以下のような観点で今後、学習を行っていくことになると思います。
・Gitの基本的な仕組みと使い方
・GitとSVNの違いと利点
・SVNからGitへの移行や併用
・GitHubの使い方と何ができるのか
・GitHubを使用してなにかやってみよう

Gitについての基礎知識

バージョン管理システムとは

コンピュータ上のプログラムソースやドキュメントなどの手動バックアップから脱却するためのシステムという印象。

作成、編集されるファイルの変更履歴を管理することができ、特に複数人で扱うときには管理の手間や人為的なミスを軽減することができる。
また、バージョン管理システムでは、ファイルを管理する大本を「リポジトリ」と呼び、リポジトリにアップロードする行為を「チェックイン」、ダウンロードする行為を「チェックアウト」と呼ぶ。
※この辺の操作名はSVN独自ではなかったってことも今回初めて知りました

知名度と使用率はApache SubVersion(SVN)とgitの二つが現在では高いそうです。
※私もちゃんと知っているのはそれぐらい


一般的な利点は以下の通りでしょうか。
・作成、変更時点のバックアップを容易に行うことができる。
・修正経緯を追うことができる。
・必要時点のバージョンに容易に戻すことできる。
・複数人での修正内容をまとめることができる。
・上記について、管理工数やミスを軽減することができる。

Gitとは

Git(ギット[2][3][4])は、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発され、それ以降ほかの多くのプロジェクトで採用されている。Linuxカーネルのような巨大プロジェクトにも対応できるように、動作速度に重点が置かれている。現在のメンテナンスは濱野純 (英語: Junio C Hamano) が担当している。

引用元:Git - Wikipedia

Gitは分散型バージョン管理システムです。

バージョン管理システムのシェアとしては、87.2%になるそうです。2位のSVNにも大差で圧倒的な1位です。
これはエンジニアとして活動していくなら学ばない手はないですね。
(シェア率については以下の記事を参照)
2018年 バージョン管理システムトップ7 - Stack Overflow | マイナビニュース

GitとSVN -分散型の特徴から見るGit-

バージョン管理システムとして有名なGitは分散型、SVNは集中型と言われています。それぞれどのようなものなのか。

★SVN(集中型)

私にとっては見慣れた構成。
f:id:wantanBlog:20190804004905p:plain


資材を管理するリポジトリがサーバなどの一か所にのみあり、開発者はそのリポジトリを共有してチェックアウトやコミットなどの操作を行います。

Git(分散型)

Gitの構成イメージ。現時点では理解しきれていないので厳密にはちょっと違ってくるのかもしれない。
※正確にはコミットの対象のみを追加するインデックスがファイルのローカルリポジトリの間にあったりしますが図の関係で省略。
f:id:wantanBlog:20190804005209p:plain


中央に(リモート)リポジトリを据えるのは基本的に一緒ですが、今度は開発者ごとにリポジトリを保有する形になります。これが分散型と言われる所以ですね。
開発者は自身のファイルなどをローカルリポジトリにコミットを行い、ローカルリポジトリからリモートリポジトリにプッシュと言われる操作を行う運用となります。


一見するとGitよりもSVNの方が構成がシンプルで分かりやすいように思います。
※これは事実で集中型の残された利点なのでしょう。

では何がGit(分散型)は何が良いのか。一般的には以下のようなことが言われているようです。

・ローカルへのコミットができる

他の開発者に影響を及ぼさない範囲でコミットができるという特徴ですね。
SVNだと一般によくもわるくもコミット一発でリモートリポジトリに変更が反映されるので、ソースコードであれば動作が保証された状態でコミットを行うことになると思われるので、コミット単位が大きくなりがちです。

個人単位での検証なども格段にやりやすくなると思われます。

・ブランチが簡単に切れる

ブランチは開発者が並行で対応を行っているときに誰かの対応のみを検証環境へリリースするときなどにも使用しますから稼働中のシステムへの対応などでは特に必須になる印象です。

SVNを使用してて思うのは管理側としては、ブランチあんまり切りたくないなトランクへのマージが面倒だなってところがあります。ファイルの競合とかが起きると面倒すぎるんですよね。

ではどのくらい楽になるのか?というところはまだ体感したわけではないので自分の言葉では述べられませんね。
ただ、わかば本をみてる限りではブランチ運用は、やって当然のものとして扱われているのが印象的で、確かにSVNよりGitの方が運用しやすそうな感じがしました。

あとは差分の比較がやりやすいんだとか。SVNだと差分の比較とかはほぼ手動で行っている感じなんですよね。。。

GitHubについて

詳しくは書籍や有識者のまとめを見てください。
Gitの特徴や利点の一つとして取り上げないわけにはいかないという認識だったので、項目は作りました。

公式サイトでは以下のように説明されています。

GitHubは、ユーザのみなさんからヒントを得て作成された開発プラットフォームです。オープンソースプロジェクトやビジネスユースまで、GitHub上にソースコードをホスティングすることで数百万人もの他の開発者と一緒にコードのレビューを行ったり、プロジェクトの管理をしながら、ソフトウェアの開発を行うことができます。

github.co.jp


またわかば本の説明を借りると以下の通りです。

「代表的なGitホスティングサービスの一つで、無料で公開リポジトリの作成や制限付きで非公開リポジトリの作成を行うことができる。」

GitHubは単に管理ツールとなるだけでなくソースベースでのコミュニケーションツールとして使用してもできそうですね。
公開リポジトリはオープンソースとして公開して、非公開リポジトリは名前の通り、組織内などだけで共有したい場合に使用するのですね。

いずれはGitHubでなにかしら公開するところまでいけたらいいなぁと密かに思っていますがだいぶ先になりそう。





全体的にふわっとした書き味になってしまっているのはまだ実際に使用していないせいです。
しっかり理解していないとまとめるのは難しいし、手を動かさないとしっかり理解するのは難しい。
ということで、そこまで深いところまではやるつもりはないですが、どこかで実際に手を動かしてみたいと思います。