対象読者
今回の対象読者は下記のとおりです。
- Windowsに関する基礎的な知識
- Gitに興味がある方
- Subversionなどの別のバージョン管理システムを利用したことがある方
必要な環境
- Git for Windows(フリー)
- Git Extensions(フリー)
リモートリポジトリ
前回まで、ローカルリポジトリにおける各種操作について解説してきましたが、今回はリモートリポジトリと連携した操作について解説していきます。
Gitにおけるリモートリポジトリとは、ローカルリポジトリ以外のネットワーク上やファイル上に存在するものです。リモートリポジトリは1つに限らず、複数持つこともできます。例えば、あるリポジトリを複製すると、複製元がリモートリポジトリとして関連付きますが、手動で特定ロケーションのリポジトリをリモートリポジトリとして登録することもできます。
分散バージョン管理システムであるGitでは多様なリモートリポジトリの操作パターンが考えられますが、本稿ではよくある例として、1つのリモートリポジトリを複数人の開発者が共有するような、共有リポジトリのパターンについて解説していきます(図1)。これは通常のSVNなどで慣れた集中型バージョン管理システムと同じようにGitを利用するパターンが多いと考えるからです。
厳密にいうとリモートリポジトリと共有リポジトリは異なる概念ですが、SVNのような集中型バージョン管理システムと同様にGitを利用する場合は、イコールと思っていただいて問題ありません。
共有リポジトリの配置について
共有されるリモートリポジトリは、各開発者からアクセス可能な場所に配置しなければいけません。Gitでは、これらにアクセスするために、下表のプロトコルをサポートしています。
サポートする プロトコル |
概要 | メリット | デメリット |
---|---|---|---|
ローカル プロトコル |
共通にアクセス可能な ファイルシステムを用意。 UNIXならNFS、 Windowsなら ファイル共有で実現可能。 |
シンプルで用意しやすい。 |
ファイアウォール外など 外部ネットワークからの アクセスに問題あり。 |
Git プロトコル |
Git付属のデーモンを利用。 |
付属デーモン利用可能。 高速な転送プロトコル。 |
認証の仕組みがなく、 特定ポートでの通信が必要。 Msysgitとの組み合わせで デッドロックが 発生することがあり、 Windows上での利用に問題あり。 |
SSH プロトコル |
SSHサーバーを利用し、 一般的な方法。 |
認証の仕組みがあり、 書き込みリポジトリとして 用意可能。 |
サーバー設定が必要であり、 Linuxに比べWindowsでは 導入の敷居が高い。 |
HTTP/HTTPS プロトコル |
HTTPサーバーを利用。 匿名の読み取り専用 リポジトリとして 利用されることが多い。 |
一般的なプロトコルで ファイアーフォールなどで 問題にならない。 |
サーバー設定が必要。 書き込みには別途 WebDavプロトコルが必要。 |
それぞれのプロトコルには一長一短があります。SSHや、HTTP/HTTPSなどのプロトコルは、Linuxをサーバーとする場合とWindowsをサーバーとする場合とでは敷居の高さが変わってくるでしょう。本稿ではサーバーセットアップについての解説が主目的ではないのと、Windowsからの利用をメインに考え、ファイル共有の仕組みを利用して解説していきます。
共有リポジトリの作成
共有目的で新しいリポジトリを作成する場合には、ベアリポジトリと呼ばれる形式のリポジトリを作成します。ベアリポジトリとは、通常のリポジトリと異なり、作業ディレクトリを持たないものです。ベアリポジトリの作成には2種類の方法があり、1つ目はinitコマンドで新規作成する方法、2つ目はcloneコマンドで既存のリポジトリからベアリポジトリを複製して作成する方法です。
新規にベアリポジトリを作成するには、initコマンドに続いて--bareオプションを指定し、引き続きリポジトリのフォルダを指定します(リスト1)。--sharedオプションは第三者がアクセス可能なように適切なアクセス権を設定します。ベアリポジトリのフォルダ名の最後は、「.git」と命名する慣習となっています。
$ git init --bare --shared //magi/share/repos/sample.git Initialized empty Git repository in //magi/share/repos/sample.git
フォルダ名からも分かるように本稿では、「magi」という名前のサーバーから共有されるshareフォルダを利用しています。共有フォルダはUNC名で指定せずに、ネットワークドライブに割り当てて利用しても構いませんし、同一PC上の別フォルダを指定しても構いません(*1)。
GUIで操作する場合は、コンテキストメニューから[GitEx Create new repository]を選択すると、リポジトリ作成ダイアログが表示されます(図2)。ディレクト名を入力し、リジポジトリの種類に[作業ディレクトリを持たない中央リポジトリ]にチェックを入れ、[作成]ボタンをクリックすると、ベアリポジトリが作成されます。
既存のリポジトリを用いてベアリポジトリを作成するには、cloneコマンドに続き--bareオプションを指定し、続いて複製元となるリポジトリ、ベアリポジトリとなるフォルダ名を指定します(リスト2)。
$ git clone --bare ./sample //magi/share/repos/sample.git Cloning into bare repository '//magi/share/repos/sample.git'... done.
この既存リポジトリからベアリポジトリを作成する場面としては、先行して作成した開発物を共有リポジトリとしてメンバーに公開する場合などに利用されるでしょう。また万が一、共有リポジトリが壊れてしまった時に、複製されたリポジトリを持っていればこの手順で復元することもできます。
GUIによる操作は、エクスプローラーのコンテキストメニューから[GitEx Clone]を選択します。クローンダイアログが表示されるため、クローンするリポジトリ、クローン先などを入力、リポジトリの種類を[作業ディレクトリを持たない中央リポジトリ]にチェックを入れ、[クローン]ボタンをクリックすれば完了です。