共有

SVNでは、開発者は変更内容をローカルローカルマシン内の作業コピーから中央リポジトリにコミットすることによって作業成果を共有します。他の開発者はその変更内容を各々のローカル作業コピーにプルします。

Git のコラボレーション・ワークフローは大きく異なります。Git では、作業コピーと中央リポジトリとの間に技術的な区別はなく、各々の開発者がリポジトリ全体の作業コピーを保有します。変更は中央リポジトリではなくこのローカル・リポジトリにコミットします。変更を他の開発者と共有するときは、このローカルな変更をサーバー上の公開 Git リポジトリにプッシュする必要があります。そうすることにより、他の開発者が追加されたコミットを公開リポジトリから各々の開発者のローカル・リポジトリにプルできるようになります。

Git移行: 集中型SVN開発 vs. 分散型 Git 開発

各々の開発者がリポジトリ全体を保有することが分散型バージョン管理の本質であり、このことにより様々なワークフローが可能となります。それらのワークフローの詳細についてはこのチュートリアルの Gitワークフローの章をご覧ください。

ここまでのステップではローカルのGitリポジトリを対象として移行処理を行ってきました。このセクションではこのローカルのリポジトリを Bitbucketがホストする公開リポジトリにプッシュする方法を説明します。移行期間中にGitリポジトリを共有することにより、進行中のSVN開発に影響を与えることなく Git コマンドを試みることが可能になります。切り替えを行うまでは共有Gitリポジトリをリードオンリーにしておくことが極めて重要です。即ち、すべての開発作業におけるコミットは引き続き元の SVN リポジトリに対して行います。

Bitbucket アカウントの作成

Bitbucketアカウントを保有していない場合は、それを作成する必要があります。ホスティングは5ユーザーまで無料ですので、今すぐGitワークフローの試用を開始することができます。

Bitbucket リポジトリの作成

次に、Bitbucket リポジトリを作成する必要があります。Bitbucket では、ホストされたリポジトリを簡便に管理するためのウェブインターフェイスを提供しています。ログイン後に Create repository ボタンをクリックするだけでリポジトリを作成することができます。

Bitbucket 内にリポジトリを作成する

表示されたフォームに、リポジトリの名称とその説明を入力します。リポジトリを非公開にする場合は、Access levelオプションをチェックしたままにすれば、指定された開発者のみがクローンを行うことができます。Forking欄ではAllow only private forksを指定します。Repository typeGitを選び, 使用するプロジェクト管理ツールがある場合はそれを選択し、Language の欄ではプロジェクトで使用する基本プログラム言語を選択します。

Bitbucket 内にリポジトリのフィールドを作成する

ホストされたリポジトリを作成するには、Create repositoryをクリックしてフォームを送信します。リポジトリが作成されると Next stepsのページが表示され、そこには既存のリポジトリの内容を取り込む場合に使用するいくつかの便利なコマンドの説明が記載されています。以下、これらのコマンドをひとつずつ説明します。

origin リモートの追加

ローカル Git リポジトリから作成した Bitbucket リポジトリへのコミットのプッシュを簡便化するために、Bitbucket リポジトリの URL をリモートとして保存します。リモートとは、URL の便利なショートカットのことです。技術的にはショートカットの名称は何であっても構いませんが、リモートリポジトリがプロジェクトの公式リポジトリである場合は習慣的にoriginという名称を用います。ローカルのGitリポジトリで次のコマンドを実行し、新しいBitbucketリポジトリをorigin リモートとして追加します。

git remote add origin https://<username>@bitbucket.org/<workspace-id>/<repo>.git

ここで、<username> の部分を Bitbucket のユーザー名に、<workspace-id> の部分をワークスペースの ID に、<repo> の部分を Bitbucket リポジトリの名称に置き換えてください。あるいは、Bitbucket Web インターフェイスから完全な URL をコピーしてそれを貼り付けてもかまいません。

GIt移行: origin リモートの追加

上のコマンドを実行すると、Bitbucket リポジトリの参照として origin を他の Git コマンドで使用できるようになります。

ローカルリポジトリの Bitbucket へのプッシュ

次に、ローカル Git リポジトリの内容を Bitbucket リポジトリに取り込まなければなりません。この操作は「プッシュ」と呼ばれ、これを行うには次のコマンドを実行します:

git push -u origin --all

-uオプションを指定すると、Gitは上流ブランチの追跡を行い、リモートリポジトリとローカルリポジトリのコミット履歴に差異が生じた場合はそれを知ることができます。--allオプションは、ローカルのブランチをすべてリモートリポジトリにプッシュすることを指定するものです。

また、--tags オプションを指定して、ローカルのタグを Bitbucket リポジトリにプッシュする必要があります。

git push --tags
Git移行: Bitbucketリポジトリへのプッシュ

以上で、Bitbucket リポジトリは実質的にローカルリポジトリのクローンになりました。Bitbucket のウェブインターフェイスでは、すべてのブランチにおけるすべてのコミット履歴を確認することができます。

チームメンバーとのリポジトリの共有

次にするべきことは、Bitbucket リポジトリのURL をそれにアクセスする必要のある開発者と共有することです。Git リポジトリの URL は、Bitbucket のリポジトリホームページからコピー・ペーストすることができます:

リポジトリ URL を共有

リポジトリを非公開に指定してある場合は、Bitbucket ウェブインターフェイスの Administrationタブで、チームメンバーへのアクセス許可を設定する必要があります。左のサイドバーにあるAccess managementリンクをクリックして、アクセスを許可するユーザーまたはグループの管理を行います。

Git移行: Gitリポジトリのアクセス管理

別の方法として、Bitbucket に用意されている招待機能を利用して、他の開発者によるリポジトリへのアクセスを許可することも可能です。招待された開発者にはリポジトリへのアクセスが自動的に許可されるため、アクセス許可設定を行う必要はありません。

他の開発者がリポジトリの URL を取得すると、git clone コマンドを使用してリポジトリをローカル マシンにコピーし、プロジェクト開発作業を開始できます。たとえば、他の開発者が自分のローカル マシン上で次のコマンドを実行すると、プロジェクトの内容を反映した新しい Git リポジトリが <repo> というディレクトリに作成されます。

git clone https://<username>@bitbucket.org/<workspace-id>/<repo>.git

Git ではなく SVN でコミットを継続

ここまでの操作で、ローカルリポジトリを Bitbucket リポジトリ にプッシュすることや、チームメンバーがそれぞれのローカルマシーンにリポジトリをクローンして Bitbucket リポジトリを使用することができるようになりました。即ち、Git を用いたコラボレーションを開始することができます。しかしながら、全員が切り替えに対応できるようになるまでは、コミットは引き続き SVN リポジトリに対して行うべきです。

Git リポジトリに変更が加えられる唯一のケースは、元の SVN リポジトリとの間で前のページで説明した同期処理が行われた場合です。即ち、あらゆる場合において Git リポジトリは (ローカルリポジトリもリモートリポジトリも) それへのアクセスがリードオンリーであるということです。開発者は Git の試用を行なうことが可能であり、また Git リポジトリをビルドプロセスに適用することもできますが、しかしながら変更を正式にコミットする際に Git を用いることは回避するべきです。

Git への移行: Git リポジトリに変更が加えられる唯一のケースは、元の SVN リポジトリからの処理が行われた場合です。

要約

このステップでは、Bitbucket リポジトリをセット アップして、変換した Git リポジトリを他の開発者と共有します。皆さんは、これまでに、Git ワークフローに記述されている Git ワークフローの実装に必要なツールをすべて獲得しているはずです。SVN リポジトリとの同期とその結果発生する Git コミットの Bitbucket 経由での共有は、開発チームが Git に納得するまでいつまででも続行できます。その後、SVN リポジトリを廃止して移行プロセスを完了できます。

推奨

Bitbucket ブログ

DevOps ラーニング パス

Git の詳細

その他の Git ガイドとリソースについては、このハブをご確認ください。