Git と GitHub について復習する

はじめに

Git と GitHub、セットでなんとなく勉強して、違いをよく理解しないままなんとなく使っていた。 今後仕事で使っていくだろうし、こんな理解ではまずい。 きちんと理解を深めるために、簡単に学習したことをまとめたいと思う。

Git と Github とは

Git とは、

プログラムソースなどの変更履歴を管理する分散型のバージョン管理システムのこと。-Wikipediaより

GitHubとは、

ソフトウェア開発のプラットフォームであり、ソースコードホスティングする。コードのバージョン管理システムにはGitを使用する。-Wikipediaより

ん??もう少し詳しく。

Git について

Git は、Linux の生みの親 Linus Torvalds によって開発された。Linux カーネル コミュニティは困難な問題に直面した。バージョン管理システム BitKeeper を使うことができなくなり、他のソフトウェア構成管理 (SCM) システムも分散システムのニーズを満たすことができなかった。Linus は 10 日間くらいの間雲隠れし、翌週には Git を持って登場した。13年以上たった今も世界中で使われているシステムを10日間で作り上げたのである。

Gitの最大の特徴は、分散型の名の通り、ローカル環境(自分のパソコンなど)に、全ての変更履歴を含む完全なリポジトリの複製が作成されるということ。これは、各ローカル環境がリポジトリのサーバーとなれるということである。分散型ではない、これまでのバージョン管理システムでは、サーバー上にある1つのリポジトリを、利用者が共同で使っていた。このため、利用者が増えると変更内容が衝突したり、整合性を維持することが大変であった。

Gitでは、ローカル環境にもコードの変更履歴を保存(コミット)することができるので、リモートのサーバーに常に接続する必要がなく、ネットワークに接続していなくても作業を行うことができる。

作業の流れ

Gitは分散型のソースコード管理システムであるため、リモートサーバ等にある中心リポジトリの完全なコピーを手元(ローカル環境)に作成して、そのローカルリポジトリを使って作業を行う。

一般的な開発スタイルでは、以下のようなステップの繰り返しで作業が行なわれる。

  1. git clone:リモートサーバ等にある中心リポジトリをローカルに複製する。
  2. git commit:ローカルでコンテンツの修正・追加・削除を行い、ローカルリポジトリに変更履歴を記録する。必要に応じて過去の状態の閲覧や復元などを行う。場合によってはこのステップを何度か繰り返す。
  3. git pull:中心リポジトリに加えられた他人による変更をローカルに反映させる。
  4. git merge:他人の変更内容が自分の変更内容と衝突することもある。衝突は、Gitが自動で解決できることもあれば、手動で解決しなければならないこともある。
  5. git push:ローカルの変更内容を中心リポジトリに反映させる。ステップ2.へ戻る。

初期設定を行う

$ git config --global user.name "XXXX"
$ git config --global user.email "XXXX@hogehoge.com"

ローカルにリポジトリを作成し、リモートにプッシュする

リポジトリ:コミットを書き入れるもの。履歴を持っているもの。
ローカルリポジトリ:自分のパソコン
リモートリポジトリ:GitHub

$ git init
$ git add .
$ git commit -m "Initial commit"
$ git remote add origin https://github.com/XXXX/XXXXXX.git
$ git push -u origin master

リモートの原型の部分をoriginという。
commitはローカルリポジトリの中で行なって、それをpushしてGitHubに送り込む。
GitHubはファイルを共有して管理するために使う。

Github について

GitHubは、 いろんなプロジェクトのためにGitのリポジトリホスティングするサービスである。 GitHubソースコードホスティングすることで複数人のソフトウエア開発者と協働してコードをレビューしたり、プロジェクトを管理しつつ開発を行うことができる。

独自の便利な機能もたくさんある便利なツールである。

まとめ

Gitとは、バージョン管理システムVCS):ソフトウェア、分散管理
GitHubとは、web上のGitリポジトリサービス:無料のサービス
本質的な2つの違いを理解する!