Gitの基本

More than 1 year has passed since last update.


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


  • 作業内容を記録していくことができる

  • 過去の作業内容を簡単に把握できたり、特定の日時の状態に戻したりができる

フォルダを丸ごとコピーし、日付を付けて置いておく…というのもバージョン管理の一つ。

ただしその方法だと、細かな変更内容を把握するのは難しい。

Gitでバージョン管理することにより、いつでも過去の状態を参照できるようになる。



Gitの特徴

以下の特徴を持つバージョン管理システム。


  • 分散型 ... 一度サーバからソースコードを取得すればオフラインで作業でき、任意のタイミングでサーバに反映できる

  • 高速 ... SVNなど他のバージョン管理システムよりも、高速に動作する

  • 賢いマージ ... 他のバージョン管理システムよりも、作業内容を賢くまとめてくれる



リポジトリ

ソースコードは「リポジトリ」と呼ばれる場所で管理する。

リポジトリは基本的に、ホスティングサービス上で作成するといい。



ホスティングサービス

リポジトリを管理してくれる場所。

一人で作業する場合は無くてもいいが、バックアップのためにも使用することを推奨。複数人で作業する場合は必須。

有名どころだと、以下のようなものがある。


  • GitHub ... 一番メジャーだと思われる。オープンソースで公開する場合に最適。非公開リポジトリを作りたい場合は有料

  • Bitbucket ... 無料で非公開リポジトリを作れる。1リポジトリに5ユーザ以上参加させたい場合は有料



Git操作


  • コマンドで操作する

  • Sourcetreeなどグラフィカルなソフトウェアで操作する

の2つがある。WindowsやMacで使うなら、グラフィカルなソフトウェアを使うといい。



クローン

リポジトリの内容をローカルにコピーすること。

Gitではサーバ上だけでなくローカルにもリポジトリの複製を持ち、定期的に同期させる。



コミットとプッシュとプル


  • コミット ... ローカルのリポジトリに作業を記録する

  • プッシュ ... コミット内容をサーバのリポジトリに記録する

  • プル ... サーバのリポジトリの内容をローカルのリポジトリに反映する(他の人の変更内容を取り込む)



ファイルの状態


  • 作業ディレクトリ ... 作業中のファイル

  • ステージングエリア ... 次にコミットされるファイル

  • Gitディレクトリ ... コミットされたファイル

の3つがある。

作業ディレクトリにあるファイルをステージングエリアに移動させ、それに対してコメントとともにGitディレクトリに移動させる。(=コミット)

ステージングエリアがあることにより、一部のファイルのみコミット対象にすることができる。

ここまでできれば、最低限だがGitを使うことができる。



ブランチとマージ

ブランチを作れば、いくつもの作業を同時に進めることができる。

作業が完了したら、もとの場所にマージ(統合)することができる。

複数人で作業するときに、特に力を発揮する。



コンフリクト

マージの際、作業内容が競合したことをいう。


  • マージ元の作業が正しいとみなす('相手の変更'を使って解決)

  • マージ先の作業が正しいとみなす('自分の変更'を使って解決)

  • 手動で調整し、コミットしなおす(解決済みにする)

という対応がある。

Sourcetreeの場合、競合しているファイルを右クリックし、「競合を解決」から解決方法を選択できる。



ブランチモデル

gitでは自由にブランチを作成できるが、何のルールも無く作成すると混乱のもとになる。

有名どころのルールとして以下がある。


  • GitHub Flow ... 小規模開発向け。masterブランチから開発用ブランチを作成し、作業が完了したらmasterブランチに戻す

  • Git Flow ... 中規模~大規模開発向け。master、develop、feature、release、hotfix という5種類のブランチを使い分ける

Git Flow をベースに、独自のブランチモデルで運用しているところもある。



コミットの粒度とメッセージ

あとで見直しやすいように、ということを意識してコミットするといい。

「コミットの際に課題番号も書く」など、独自のルールが設けられることも多い。



.gitignore

バージョン管理対象外にするファイルを指定できる。

Thumbs.db.DS_Store は管理対象外にしておく。

その他環境依存の設定ファイルや、巨大すぎる動画ファイルやライブラリも省いておくと管理しやすくなる。



課題管理・Wiki

大抵のホスティングサービスには用意されている。

うまく使うと便利。この部分は、BacklogやRedmineなど他のサービスやツールを使うこともある。



最後に

Gitに慣れると、Git管理されていない状態での制作には戻りたくなくなります。

とはいえ慣れは必要です。よく解らない状態になったら、近くの人に聞きましょう。