こんにちは。
SI部の藤本です。
今回はバージョン管理システム「GIT」を利用するためのクライアントツール「SourceTree」のインストールとローカルリポジトリ作成をご紹介します。
分散型バージョン管理システム「Git」とは
ソフトウェア開発ではソースコードを作成しながらソフトウェアを作り上げていきますが、バグの修正や機能の追加ごとにソースコードの状態を記録し、それぞれのバージョンを管理することが必要になります。
そういったソースコードを管理するソフトウェアが「バージョン管理システム」であり、複数人でのソフトウェア開発において必要不可欠なソフトウェアとなっています。
バージョン管理システムにはCVS(Concurrent Versions System)やSVN(Apache Subversion)、Gitなどがあります。
GitはLinuxカーネル開発で培われたノウハウを生かした管理システムであり、Linuxのような大規模プロジェクトにも対応できるように設計されています。大規模プロジェクトでは多数のソースコードを管理していかなければならないので、ファイルの変更点の抽出や「リポジトリ」(ファイルの状態を記録する場所)の操作が高速にできる必要があり、動作速度に重点が置かれています。
また、リポジトリを複数用意できる「分散型」のアーキテクチャを採用しており、開発者間の共同作業を柔軟に行えます。
2005年に登場してから進化し続けており、小規模なプロジェクトから大規模なプロジェクトまで、さまざまなプロジェクトでGitが使用されています。
集中型と分散型の違い
バージョン管理システムは大きく「集中型バージョン管理システム」と「分散型バージョン管理システム」に分けることができます。集中型バージョン管理システムであるSVNと分散型バージョン管理システムであるGitの違いを見ていきながら、Gitを使う必要性について説明します。
集中型バージョン管理システム「SVN」
SVNはGitが登場する前から使われている集中型のバージョン管理システムです。SVNよりも先に公開されたバージョン管理システムに「CVS」がありますが、SVNはCVSを参考にして開発されました。まずはSVNについて見ていきます。
SVNは集中型(クライアント・サーバ型)のバージョン管理システムです。ファイルそのものや変更の履歴などを保存する場所を「リポジトリ」(貯蔵庫)と呼びますが、SVNの場合は(ソフトウェア1つにつき)1つのリポジトリを使います。ソフトウェア開発に参加するメンバーは、中央リポジトリ(プロジェクトメンバー間で共有するリポジトリ)からソースコードを持ってきて編集し、編集が終わったら中央リポジトリに直接反映します。
SVNは集中型のバージョン管理システムなので、リポジトリが置かれたサーバに接続できない環境の場合、最新のソースコードを取得やファイル編集の反映ができません。
分散型バージョン管理システム「Git」
集中型バージョン管理システムのSVNに対し、Gitは分散型のバージョン管理システムです。
リポジトリを複数持つことができ、開発の形態や規模に合わせてソースコードの管理ができます。リポジトリを複数用意できるので「分散型」と呼ばれています。
例えば上の図のように、リモートリポジトリをサーバ上に置き、開発者それぞれがローカルにリポジトリを持つという構成が考えられます。この場合、普段はローカルリポジトリを使って作業し、ある程度作業できたらリモートリポジトリに反映するといった使い方ができます。リモートリポジトリにアクセスできない環境でも作業を進めることができます。
また、大きな規模のソフトウェアの場合、個人や小さなチームで試験的に実装を進めて、ある程度進んだ時点で親のリポジトリや他の開発者のリポジトリに反映するといった使い方ができます。開発者同士の作業を柔軟に進めることができ、オープンソースのプロジェクトなどにも適しています。
WindowsのGitクライアントSourceTreeのインストールと初期設定
次にGitクライアントインストールの手順を紹介します。
私はこれまで、Windows の Git クライアントはいろいろ使ってきましたが今回は「SourceTree」を紹介します。
SourceTreeは元々Mac版が先にリリースされていましたが、最近になってWindows版もリリースされさらに日本語にも対応しました。
下記URLからDownLoadできます。
http://sourcetreeapp.com/
SourceTree をインストールするだけで、Windows で Git を使うためのツールがひと通り揃い環境構築の敷居が低いです。
他の Git クライアントに比べて GUI が使いやすいと思います。マウスをクリックする回数が少なくなるように設計されているためでしょうか。ナビゲーションもまとまっていて、作業も直感的。ターミナル(黒い画面)を使わないので非エンジニアにもオススメです。
また、SourceTreeは「git-flow」にも対応しています。「git-flow」について今回は割愛させていただきます。
GitクライアントSourceTreeをインストール
インストーラをダウンロードして実行します。
.Net Framework が入っていない場合は自動でインストールされます。
インストール後、SourceTree を起動するとセットアップウィザードが立ち上がります。
最初に Git コマンドのインストール方法を設定します。SourceTree と一緒に Git をインストールする場合は、一番上の「Download an embedded version of Git for SourceTree alone to use」を選択します。
既に msysgit などで Git をインストールしている場合は、インストール済みの Git を使用することもできます。
Mercurial一式も未導入なら導入するか?と訊かれます。未導入なら一番上を選択して導入して下さい。
コミットユーザ名と、メールアドレスを設定します。「Allow SourceTree to modify your global Git adn Mercurial config files」と「Configure automatic line ending handling by default」にもチェックを入れます。GitHub等のアカウントを持っているかたはここで登録しておきます。
今回はローカルリポジトリの作成までなのでSSH鍵の設定は行いません。
ローカルリポジトリ作成
既存の開発しているソースコードがある場合、そこにGitのローカルリポジトリを作成します。
今回はEclipse環境を用いた場合をご紹介します。
1.SVN(その他バージョン管理システム)からCheckOut又は更新等を実行し、既存ソースコードを最新化
2.SourceTreeで新規リポジトリを作成
1)メニュー「新規/クローンを作成する」クリック
2)「リポジトリを作成」タブクリック
3)「保存先のパス」選択←Eclipseで開発中のディレクトリ(workspace又はプロジェクトディレクト)を指定
4)「作成」クリック※名前は自動入力されるが変更可能
5)ローカルリポジトリが作成されworkspace内に「.git」ディレクトリが作成されます。
これでローカルリポジトリが作成されファイルの更新などがGitで管理できるようになりました。
ただ、これだけではまだローカル開発できませんので、「git-flow」に基づき各ブランチを作成します。
ローカルリポジトリにmasterブランチ developブランチを作成
masterブランチ作成
1)メニュー「コミット」クリック
2)コミット用メニューがポップアップするのでコミットメッセージを入力
3)「作業ツリーのファイル」領域にある全てを「Indexにステージしたファイル」に追加する
※「↑↑」は全て「↑」は個別に追加。
※「↓↓」は全て「↓」は個別に除去。
4)「コミット」クリック
5)「masterブランチ」が作成される
developブランチ作成
先程作成したmasterブランチから「developブランチ」を作成します。
1)メニュー「Git Flow」クリック
2)GitFlow用メニューポップアップ
・初回なので初期化用メニューとなる
・ブランチ名を変更できるが今回は変更しないでそのまま「OK」クリック
3)初期化後、developブランチが作成される
これで、ローカルにて開発できる環境となりました。
リモートとの同期等は次回、ご紹介します。
Gitを使ううえでの“基本”用語
ここで基本的な用語をご紹介します。
リポジトリとコミット(Commit)
リポジトリは、ファイルやディレクトリの追加や変更を登録する場所です。登録するたびにファイルやディレクトリの状態が格納されます。ファイルやディレクトリをリポジトリに登録することをコミットといいます。
<修正>
リポジトリは、ファイルの追加や変更を登録する場所です。登録するたびにファイルの状態が格納されます。ファイルをリポジトリに登録することをコミットといいます。
Gitでは空のディレクトリは管理対象となりません。その為、ディレクトリを追加するだけでは、コミット対象にはならず、変更リストに含まれないのです。
あえて、空のディレクトリを対象とするのであれば、ディレクトリの配下に何でも構わないのですがファイルを作成しておくと対象となりえます。
このような場合、Gitでは慣例的に「.gitkeep」というファイル名が用いられる事が多いようです。
<参照>
空のディレクトリをgitで管理するには.gitkeepを使う
空ディレクトリを管理対象としたい
必要に応じてコミットしておくことで、どこが変更されたのか、誰が変更したのか、といった履歴を後から見たり、過去のある時点のファイルをリポジトリから取得したりすることが可能になります。
クローン(Clone)
リポジトリを複製することを、「クローン」と呼びます。
例えば、プロジェクトで使うファイルがリモートリポジトリに用意されている場合に、リモートリポジトリを複製して自分のPCにリポジトリを作り、作業を始めることができます。
プッシュ(Push)
自分のリポジトリの内容を他のリポジトリに送信して取り込ませる操作のことを「プッシュ」といいます。
例えば、作業が一区切りした際に自分のリポジトリの内容をプロジェクトで共有しているリポジトリに取り込ませる際にプッシュという操作を行います。
プル(Pull)
他のリポジトリの更新された部分を自分のリポジトリに取り込む操作のことを「プル」といいます。
例えば、他の人がプロジェクトで共有しているリポジトリにプッシュした後に、その内容をリモートリポジトリから自分のローカルリポジトリに取り込む際にプルという操作を行います。
これ以外にも様々な用語(機能)がありますが、今回はここまでとします。
最後に
「Git使って」と言われたときは、ひとまずこれで何とかなるかと思います。
Gitはまだまだいろんなことができます。
tigでGitを便利に使用する方法やzshでの補完、oh-my-zsh等々、次回以降ご紹介できればと思います。
一人でもバージョン管理は有効な手段ですし、Gitやバージョン管理ってそれほど難しくないと思っていただければ幸いです。
次回はリモートリポジトリを使ったリポジトリ設定などをご紹介します。
ご一読頂き有難うございました。