<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja"> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>共用レポジトリのレイアウト — Bazaar 2.7.0 ドキュメント</title> <link rel="stylesheet" href="../_static/classic.css" type="text/css" /> <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> <script type="text/javascript" src="../_static/jquery.js"></script> <script type="text/javascript" src="../_static/underscore.js"></script> <script type="text/javascript" src="../_static/doctools.js"></script> <script type="text/javascript" src="../_static/language_data.js"></script> <script type="text/javascript" src="../_static/translations.js"></script> <link rel="shortcut icon" href="../_static/bzr.ico"/> <link rel="search" title="検索" href="../search.html" /> <link rel="next" title="Eメールを設定する" href="setting_up_email.html" /> <link rel="prev" title="作業スペースを構成する" href="organizing_your_workspace.html" /> </head><body> <div class="related" role="navigation" aria-label="related navigation"> <h3>ナビゲーション</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="setting_up_email.html" title="Eメールを設定する" accesskey="N">次へ</a></li> <li class="right" > <a href="organizing_your_workspace.html" title="作業スペースを構成する" accesskey="P">前へ</a> |</li> <li class="nav-item nav-item-0"><a href="../index.html">目次 (2.7.0)</a> »</li> <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">Bazaarユーザーガイド</a> »</li> </ul> </div> <div class="document"> <div class="documentwrapper"> <div class="bodywrapper"> <div class="body" role="main"> <div class="section" id="id1"> <h1>共用レポジトリのレイアウト<a class="headerlink" href="#id1" title="このヘッドラインへのパーマリンク">¶</a></h1> <p>Bazaarは共用ブランチ内部のブランチのレイアウトを柔軟に決められるように設計されました。 この柔軟性によってユーザーはBazaarを自分のワークフローに合わせることができますが、"よい"レイアウトとは何かということを疑問に持つようになります。 ここでは代わりになるものをいくつか説明しそれぞれの利点を検討します。</p> <p>言及すべき重要な点はよいレイアウトは"一般的な"ユーザーが理解できるように ブランチの内容を何らかの形でハイライトします。 SVNにおいて これは "<code class="docutils literal notranslate"><span class="pre">trunk/</span></code>" ブランチであると考えられ、 大抵のレイアウトではこの命名規約が守られています。 これを "<code class="docutils literal notranslate"><span class="pre">mainline</span></code>" もしくは "<code class="docutils literal notranslate"><span class="pre">dev</span></code>" と呼ぶ人もいれば、 CVSから来た人々はしばし "<code class="docutils literal notranslate"><span class="pre">HEAD</span></code>" と言及します。</p> <div class="section" id="svn-trunk-branches"> <h2>"SVN形式" (<code class="docutils literal notranslate"><span class="pre">trunk/</span></code>, <code class="docutils literal notranslate"><span class="pre">branches/</span></code>)<a class="headerlink" href="#svn-trunk-branches" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>SVNからやってきた人々は次のような"標準的な"プロジェクトのレイアウトに慣れています:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">repository</span><span class="o">/</span> <span class="c1"># リポジトリ全体</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># 開発のメインライン</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">foo</span><span class="o">/</span> <span class="c1"># 開発中のfoo機能用ブランチ</span> <span class="o">|</span> <span class="o">...</span> <span class="o">+-</span> <span class="n">tags</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">+-</span> <span class="n">release</span><span class="o">-</span><span class="n">X</span> <span class="c1"># 特定のリリースバージョンをマークするために専用ブランチ</span> <span class="o">...</span> </pre></div> </div> <p>Bazaarでは、これは完全に適切なレイアウトです。 SVNからやって来た人が慣れ親しめることが利点で開発の焦点を当てる場所が明確になります。</p> <p>同じリポジトリで複数のプロジェクトを持つとき、SVNのレイアウトは何を行うのか少し不透明です。</p> <div class="section" id="project-trunk"> <h3><code class="docutils literal notranslate"><span class="pre">project/trunk</span></code><a class="headerlink" href="#project-trunk" title="このヘッドラインへのパーマリンク">¶</a></h3> <p>SVN用の望ましい方法はプロジェクトごとにレイアウト用のトップレベルのディレクトリを用意することです:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">repository</span><span class="o">/</span> <span class="c1"># リポジトリ全体</span> <span class="o">+-</span> <span class="n">project1</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># project1の開発のメインライン</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">foo</span><span class="o">/</span> <span class="c1"># project1のfoo機能の開発用ブランチ</span> <span class="o">|</span> <span class="o">...</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project2</span><span class="o">/</span> <span class="c1"># project2用のコンテナ</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># project2用のメインライン</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># project2のブランチ用のコンテナ</span> </pre></div> </div> <p>これはBazaarでも機能します。 しかしながら、Bazaarでリポジトリを作るのは簡単で( <code class="docutils literal notranslate"><span class="pre">bzr</span> <span class="pre">init-repo</span></code> )、 それらの主要な恩恵を受けられるのは複数のブランチが共通の祖先を共有するときです。</p> <p>ですのでBazaarに対して望ましい方法は次のとおりです:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">project1</span><span class="o">/</span> <span class="c1"># project1用のリポジトリ</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># project1の開発のメインライン</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">+-</span> <span class="n">foo</span><span class="o">/</span> <span class="c1"># project1のfoo機能の開発用ブランチ</span> <span class="o">...</span> <span class="n">project2</span><span class="o">/</span> <span class="c1"># project2用のリポジトリ</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># project2用のメインライン</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># project2のブランチ用のコンテナ</span> </pre></div> </div> </div> <div class="section" id="trunk-project"> <h3><code class="docutils literal notranslate"><span class="pre">trunk/project</span></code><a class="headerlink" href="#trunk-project" title="このヘッドラインへのパーマリンク">¶</a></h3> <p>SVNで次のようなレイアウトを利用するプロジェクトもたまにあります:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">repository</span><span class="o">/</span> <span class="c1"># リポジトリ全体</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project1</span> <span class="c1"># project1用のメインライン</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project2</span> <span class="c1"># project2用のメインライン</span> <span class="o">|</span> <span class="o">...</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># コンテナ</span> <span class="o">+-</span> <span class="n">project1</span><span class="o">/</span> <span class="c1"># コンテナ (?)</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">foo</span> <span class="c1"># project1の'foo'ブランチ</span> <span class="o">+-</span> <span class="n">project2</span><span class="o">/</span> <span class="o">+-</span> <span class="n">bar</span> <span class="c1"># project2の'bar'ブランチ</span> </pre></div> </div> <p>次のレイアウトはちょっと変形させたものです:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">repository</span><span class="o">/</span> <span class="c1"># リポジトリ全体</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># コンテナディレクトリ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project1</span> <span class="c1"># project1用のメインライン</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project2</span> <span class="c1"># project2用のメインライン</span> <span class="o">|</span> <span class="o">...</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">branches</span><span class="o">/</span> <span class="c1"># コンテナ</span> <span class="o">+-</span> <span class="n">project1</span><span class="o">-</span><span class="n">foo</span><span class="o">/</span> <span class="c1"># project1の'foo'ブランチ</span> <span class="o">+-</span> <span class="n">project2</span><span class="o">-</span><span class="n">bar</span><span class="o">/</span> <span class="c1"># project2の'bar'ブランチ</span> </pre></div> </div> <p>"<code class="docutils literal notranslate"><span class="pre">trunk/</span></code>" 全体をチェックアウトすることで、すべてのプロジェクト用のメインラインを入手できるようにすることが、このレイアウトが採用されている理由だと筆者は考えます。</p> <p>このレイアウトはBazaarでも使えますが、一般的にお勧めできません。</p> <blockquote> <div><ol class="arabic simple"> <li>一回の <code class="docutils literal notranslate"><span class="pre">bzr</span> <span class="pre">branch/checkout/get</span></code> は一つのブランチを作ります。 単独のコマンドですべてのメインラインを入手する利点が得られません。 <a class="footnote-reference" href="#id3" id="id2">[1]</a></li> <li><code class="docutils literal notranslate"><span class="pre">repository/trunk/foo</span></code> が <code class="docutils literal notranslate"><span class="pre">foo</span></code> プロジェクトの <code class="docutils literal notranslate"><span class="pre">trunk</span></code> か <code class="docutils literal notranslate"><span class="pre">trunk</span></code> ブランチの単なる <code class="docutils literal notranslate"><span class="pre">foo</span></code> ディレクトリなのか明らかではありません。 この混乱の一部はSVNによるものです。 SVNはプロジェクトのブランチ用に使う1つのプロジェクトのファイルに対して同じ"名前空間"を使うからです。 Bazaarにおいて、プロジェクトを構成するファイルの明確な定義、もしくはブランチの位置の対立軸があります (ブランチごとに唯一の <code class="docutils literal notranslate"><span class="pre">.bzr/</span></code> ディレクトリか、チェックアウトの中にたくさんの <code class="docutils literal notranslate"><span class="pre">.svn/</span></code> ディレクトリかという対立軸です)</li> </ol> </div></blockquote> <table class="docutils footnote" frame="void" id="id3" rules="none"> <colgroup><col class="label" /><col /></colgroup> <tbody valign="top"> <tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td>注: <a class="reference external" href="http://wiki.bazaar.canonical.com/NestedTrees">NestedTreeSupport</a> は"メタプロジェクト"を作成する方法を提供します。 メタプロジェクトはリポジトリのレイアウトにかかわらず複数のプロジェクトを集約します。 1つのプロジェクトを <code class="docutils literal notranslate"><span class="pre">bzr</span> <span class="pre">checkout</span></code> すれば、必要なサブプロジェクトがすべて手に入ります。</td></tr> </tbody> </table> </div> </div> <div class="section" id="project-branch-sub-branch"> <h2>入れ子形式 (<code class="docutils literal notranslate"><span class="pre">project/branch/sub-branch/</span></code>)<a class="headerlink" href="#project-branch-sub-branch" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>SVNではできない、Bazaarによる別のスタイルは、ブランチ同士を入れ子にすることです。 Bazaarは作業ツリーなしのリポジトリ作成(<code class="docutils literal notranslate"><span class="pre">--no-trees</span></code>)をサポート(と推奨)しているのでこのスタイルが可能になります。 作業ファイルはブランチの設置場所に混ぜられていないので、 好きな名前空間にブランチを設置できます。</p> <p>1つの可能性は次のとおりです:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">project</span><span class="o">/</span> <span class="c1"># リポジトリ全体、*と* プロジェクトのメインラインのブランチ</span> <span class="o">+</span> <span class="n">joe</span><span class="o">/</span> <span class="c1"># 開発者Joeの開発のプライマリブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">feature1</span><span class="o">/</span> <span class="c1"># 開発者Joeのfeature1開発ブランチ</span> <span class="o">|</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">broken</span><span class="o">/</span> <span class="c1"># feature1を開発するためのステージングブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">feature2</span><span class="o">/</span> <span class="c1"># Joeのfeature2開発ブランチ</span> <span class="o">|</span> <span class="o">...</span> <span class="o">+</span> <span class="n">barry</span><span class="o">/</span> <span class="c1"># Barryの開発ブランチ</span> <span class="o">|</span> <span class="o">...</span> <span class="o">+</span> <span class="n">releases</span><span class="o">/</span> <span class="o">+-</span> <span class="mf">1.0</span><span class="o">/</span> <span class="o">+-</span> <span class="mf">1.1</span><span class="o">.</span><span class="mi">1</span><span class="o">/</span> </pre></div> </div> <p>このレイアウトのアイディアはブランチ用の階層的なレイアウトを作ることです。 変更はたいていより上位の名前空間のブランチへと流れていきます。 また、このレイアウトではユーザーに独自の作業をするための場所も提供します。 このレイアウトの素晴らしい点の1つは、グローバルな <code class="docutils literal notranslate"><span class="pre">branches</span></code> 名前空間を散らかさずにミニブランチを置けるので、ブランチ作成が"手軽"になることです。</p> <p>このレイアウトのもう一つの利点は、ブランチの名前の中で詳細な内容を指定する際に繰り返しが減ることです。</p> <p>例です:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">bzr</span> <span class="n">branch</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">host</span><span class="o">/</span><span class="n">repository</span><span class="o">/</span><span class="n">project</span><span class="o">/</span><span class="n">branches</span><span class="o">/</span><span class="n">joe</span><span class="o">-</span><span class="n">feature</span><span class="o">-</span><span class="n">foo</span><span class="o">-</span><span class="n">bugfix</span><span class="o">-</span><span class="mi">10</span><span class="o">/</span> </pre></div> </div> <p>上と下を比較します:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">bzr</span> <span class="n">branch</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">host</span><span class="o">/</span><span class="n">project</span><span class="o">/</span><span class="n">joe</span><span class="o">/</span><span class="n">foo</span><span class="o">/</span><span class="n">bugfix</span><span class="o">-</span><span class="mi">10</span> </pre></div> </div> <p>また、 <code class="docutils literal notranslate"><span class="pre">repository/project/branches/</span></code> ディレクトリの中のリストがあれが何かわかるかもしれません:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">barry</span><span class="o">-</span><span class="n">feature</span><span class="o">-</span><span class="n">bar</span><span class="o">/</span> <span class="n">barry</span><span class="o">-</span><span class="n">bugfix</span><span class="o">-</span><span class="mi">10</span><span class="o">/</span> <span class="n">barry</span><span class="o">-</span><span class="n">bugfix</span><span class="o">-</span><span class="mi">12</span><span class="o">/</span> <span class="n">joe</span><span class="o">-</span><span class="n">bugfix</span><span class="o">-</span><span class="mi">10</span><span class="o">/</span> <span class="n">joe</span><span class="o">-</span><span class="n">bugfix</span><span class="o">-</span><span class="mi">13</span><span class="o">/</span> <span class="n">joe</span><span class="o">-</span><span class="n">frizban</span><span class="o">/</span> </pre></div> </div> <p>Versus こういったブランチが開発者のディレクトリに分散している。 ブランチの数が少なければ、 <code class="docutils literal notranslate"><span class="pre">branches/</span></code> は一見するだけですべてのブランチが見えるという素晴らしい利点があります。 ブランチの数が多ければ、 <code class="docutils literal notranslate"><span class="pre">branches/</span></code> はすべてのブランチが見えてしまうというはっきりした欠点があります。 (調べるブランチが100あるとき、興味のあるブランチを見つけるのが難しくなります)。</p> <p>入れ子ブランチはたくさんのブランチよりもスケーラブルのようです。 しかしながら、それぞれの個別のブランチは見つけにくいです。 (たとえば"Joeはfoo機能ブランチでバグ修正10に取り組んでいるのか、それともbarの機能ブランチを取り組んでいるのか?")</p> <p>他の小さな利点は次のようなものです:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span> <span class="n">bzr</span> <span class="n">branch</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">host</span><span class="o">/</span><span class="n">project</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">1</span><span class="o">/</span><span class="mi">1</span><span class="o">/</span><span class="mi">1</span> <span class="n">もしくは</span> <span class="n">bzr</span> <span class="n">branch</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">host</span><span class="o">/</span><span class="n">project</span><span class="o">/</span><span class="n">release</span><span class="o">/</span><span class="mi">1</span><span class="o">/</span><span class="mi">1</span><span class="o">/</span><span class="mi">2</span> </pre></div> </div> <p>1.1.1と1.1.2のリリースを示します。 これはリリースする数と一度に見られる能力よりも分割する方がゲインが多いかによります。</p> </div> <div class="section" id="dev-merged-experimental"> <h2>ステータスによる種類分け (<code class="docutils literal notranslate"><span class="pre">dev/</span></code>, <code class="docutils literal notranslate"><span class="pre">merged/</span></code>, <code class="docutils literal notranslate"><span class="pre">experimental/</span></code>)<a class="headerlink" href="#dev-merged-experimental" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>ブランチをbreak upする他の方法はこれらを現在のステータス順でソートすることです。 そうするとレイアウトは次のようになります:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">project</span><span class="o">/</span> <span class="c1"># レイアウト全体</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># 開発に焦点を当てたブランチ</span> <span class="o">+-</span> <span class="n">dev</span><span class="o">/</span> <span class="c1"># 進行中の作業用コンテナディレクトリ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">joe</span><span class="o">-</span><span class="n">feature1</span> <span class="c1"># Joeの現在のfeature-1ブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">barry</span><span class="o">-</span><span class="n">bugfix10</span> <span class="c1"># bugfix 10に対するBarryの作業内容</span> <span class="o">|</span> <span class="o">...</span> <span class="o">+-</span> <span class="n">merged</span><span class="o">/</span> <span class="c1"># これらのブランチがマージされたことを示すコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">bugfix</span><span class="o">-</span><span class="mi">12</span> <span class="c1"># すでにマージされたバグ修正</span> <span class="o">+-</span> <span class="n">abandonded</span><span class="o">/</span> <span class="c1"># 'dead-end'と見なされているブランチ</span> </pre></div> </div> <p>これはたくさんの利点と欠点があります。 あまり多くない数のアクティブに開発されているブランチを見ることができるか、今までに作られた全てのブランチが見えるかという違いがあります。 古いブランチは削除しない限り失われませんが、別ディレクトリへと整理されるのでたいていの場合お目当てのブランチを見つけやすくなります。 (反対に、古いブランチは見つけにくくなります)。</p> <p>このレイアウトで最大の欠点、ブランチが移動することです。 誰かが <code class="docutils literal notranslate"><span class="pre">project/dev/new-feature</span></code> ブランチをフォローしているとき、 そのブランチが <code class="docutils literal notranslate"><span class="pre">trunk/</span></code> にマージされると <code class="docutils literal notranslate"><span class="pre">project/merged/new-feature</span></code> に移動するので <code class="docutils literal notranslate"><span class="pre">bzr</span> <span class="pre">pull</span></code> が突然機能しなくなります。 この回避策はいくつかあります。 1つは利用者を導くために古いブランチから新しいブランチにリクエストするHTTPリダイレクトを使うことです。 <code class="docutils literal notranslate"><span class="pre">bzr</span></code> >= 0.15 ではユーザーに <code class="docutils literal notranslate"><span class="pre">http://old/path</span> <span class="pre">が</span> <span class="pre">http://new/path</span></code> にリダイレクトされることを教えてくれます。 しかしながら、HTTP以外の方法(SFTP、ローカルファイルシステム、など)を通してブランチにアクセスしている場合は役に立ちません。</p> <p>一時的なリダイレクト用にシンボリックリンクを利用することも可能です (シンボリックリンクがリポジトリ内にある限りトラブルはほんのわずかしかありません)。 しかし、シンボリックリンクを結局削除したくなったり、散乱の削減の恩恵を得られません。 シンボリックリンクの代わりの別の可能性は <code class="docutils literal notranslate"><span class="pre">BranchReference</span></code> を使うことです。 <code class="docutils literal notranslate"><span class="pre">bzr</span></code> コマンドを通してこれらを作るのは現時点では難しいですが、便利だと思う人がいれば変わるかもしれません。 これは実際には <a class="reference external" href="https://launchpad.net">Launchpad</a> が <code class="docutils literal notranslate"><span class="pre">bzr</span> <span class="pre">checkout</span> <span class="pre">https://launchpad.net/bzr</span></code> をできるようにしている方法です。 <code class="docutils literal notranslate"><span class="pre">BranchReference</span></code> は機能的にはシンボリックリンクですが、他のURLの参照ができます。 相対パスによる参照ができるように拡張されれば、HTTP、SFTP、ローカルパスを通しても動作するでしょう。</p> </div> <div class="section" id="id4"> <h2>日付/リリース/その他で種類分け (<code class="docutils literal notranslate"><span class="pre">2006-06/</span></code>, <code class="docutils literal notranslate"><span class="pre">2006-07/</span></code>, <code class="docutils literal notranslate"><span class="pre">0.8/</span></code>, <code class="docutils literal notranslate"><span class="pre">0.9</span></code>)<a class="headerlink" href="#id4" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>スケーラビリティを可能にする別の方法は"現在の"ブランチのブラウジングを許可することです。 基本的に、活発に開発されるブランチは新しく作られ古いブランチはマージもしくは廃棄されることを前提とします。</p> <p>基本的に日付レイアウトは次のようになります:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">project</span><span class="o">/</span> <span class="c1"># projectリポジトリ全体</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># 一般的なメインライン</span> <span class="o">+-</span> <span class="mi">2006</span><span class="o">-</span><span class="mi">06</span><span class="o">/</span> <span class="c1"># この月に作成されたブランチ用のディレクトリのコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">feature1</span><span class="o">/</span> <span class="c1"># "project"の"feature1"用ブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">feature2</span><span class="o">/</span> <span class="c1"># "project"の"feature2"用ブランチ</span> <span class="o">+-</span> <span class="mi">2005</span><span class="o">-</span><span class="mi">05</span><span class="o">/</span> <span class="c1"># 異なる月に作成されるブランチ用のコンテナディレクトリ</span> <span class="o">+-</span> <span class="n">feature3</span><span class="o">/</span> <span class="o">...</span> </pre></div> </div> <p>これは "私の新しいブランチをどこに設置すればいいの?" という質問に素早く答えてくれます。 機能が長期間開発されるのであれば、ブランチを最新の日付にコピーして、そこで作業を続けることも道理にかなっています。 最新の日付と、そこからのさかのぼっていくことで活発なブランチを見つけることができます。 (小さな欠点は 大抵のディレクトリリストは古い順にソートされているので、多くの場合新しいブランチにたどり着くために余計なスクロールが必要になることです)。 古いブランチを新しい位置にコピーしたくない場合、ブランチを探すのが面倒になるのも欠点です。</p> <p>別の候補は、リリースをターゲットにしたものです:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">project</span><span class="o">/</span> <span class="c1"># リポジトリ概要</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># メインラインの開発ブランチ</span> <span class="o">+-</span> <span class="n">releases</span><span class="o">/</span> <span class="c1"># リリースブランチ用のコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="mf">0.8</span><span class="o">/</span> <span class="c1"># リリース0.8のブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="mf">0.9</span><span class="o">/</span> <span class="c1"># リリース0.9のブランチ</span> <span class="o">+-</span> <span class="mf">0.8</span><span class="o">/</span> <span class="c1"># リリース0.8をターゲットとするブランチ用のコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">feature1</span><span class="o">/</span> <span class="c1"># 0.8にマージする予定の"feature1"用のブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">feature2</span><span class="o">/</span> <span class="c1"># "リリース0.8をターゲットとしたfeature2"用のブランチ</span> <span class="o">+-</span> <span class="mf">0.9</span><span class="o">/</span> <span class="o">+-</span> <span class="n">feature3</span><span class="o">/</span> <span class="c1"># リリース0.9をターゲットとした"feature3"用のブランチ</span> </pre></div> </div> <p>その派生として、ブランチが <code class="docutils literal notranslate"><span class="pre">0.9</span></code> ディレクトリに入っていることが 0.9に <em>向けた</em> ブランチであることではなく 0.9 <em>から</em> 派生したブランチであることを意味するようにすることや、 <code class="docutils literal notranslate"><span class="pre">0.8/release</span></code> が0.8ブランチの公式リリースであることを意味するようにすることが考えられます。</p> <p>一般的なアイディアはリリースをターゲットにすることで、何のブランチがマージされるのを待っているのか調べることができます。 このレイアウトはブランチの状態(開発中なのか、終了してレビューを待っているのか)に関する情報を提供しません。 これは履歴を隠す効果もあり、日付ベースの種類分けと同じような利点と欠点を持っています。</p> </div> <div class="section" id="project-joe-foo-project-barry-bar"> <h2>シンプルな開発者名 (<code class="docutils literal notranslate"><span class="pre">project/joe/foo</span></code>, <code class="docutils literal notranslate"><span class="pre">project/barry/bar</span></code>)<a class="headerlink" href="#project-joe-foo-project-barry-bar" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>別の利用できるレイアウトは、開発者ごとにディレクトリを割り当てて、その下にブランチのためのサブディレクトリを作ることです。次のようになります:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">project</span><span class="o">/</span> <span class="c1"># リポジトリ全体</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># メインラインのブランチ</span> <span class="o">+-</span> <span class="n">joe</span><span class="o">/</span> <span class="c1"># Joeのブランチ用のコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">foo</span><span class="o">/</span> <span class="c1"># Joeの"project"の"foo"ブランチ</span> <span class="o">+-</span> <span class="n">barry</span><span class="o">/</span> <span class="o">+-</span> <span class="n">bar</span><span class="o">/</span> <span class="c1"># Barryの"project"の"bar"ブランチ</span> </pre></div> </div> <p>このアイデアでは、branchは入れ子になっておらず、branchは開発者によってのみグループ化されます。</p> <p><a class="reference external" href="https://launchpad.net">Launchpad</a> で使われている派生系はこのようになっています:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">repository</span><span class="o">/</span> <span class="o">+-</span> <span class="n">joe</span><span class="o">/</span> <span class="c1"># Joeのブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project1</span><span class="o">/</span> <span class="c1"># Joeのブランチである"project1"用のコンテナ</span> <span class="o">|</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">foo</span><span class="o">/</span> <span class="c1"># Joeの"project1"の"foo"ブランチ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project2</span><span class="o">/</span> <span class="c1"># Joeの"project2"ブランチ用のコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">bar</span><span class="o">/</span> <span class="c1"># Joeの"project2"の"bar"ブランチ</span> <span class="o">|</span> <span class="o">...</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">barry</span><span class="o">/</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">project1</span><span class="o">/</span> <span class="c1"># Barryの"project1"のブランチ用のコンテナ</span> <span class="o">|</span> <span class="o">+-</span> <span class="n">bug</span><span class="o">-</span><span class="mi">10</span><span class="o">/</span> <span class="c1"># Barryの"project1"の"bug-10"ブランチ</span> <span class="o">|</span> <span class="o">...</span> <span class="o">+-</span> <span class="n">group</span><span class="o">/</span> <span class="o">+-</span> <span class="n">project1</span><span class="o">/</span> <span class="o">+-</span> <span class="n">trunk</span><span class="o">/</span> <span class="c1"># "project1"に焦点をあてたメイン開発</span> </pre></div> </div> <p>このレイアウトではそれぞれの開発者が取り組んでいるものを簡単に見ることができます。 焦点のブランチは"group" ディレクトリに保存されます。 これによって"グループ"が取り組んでいるブランチを見分けられます。</p> <p>これによって異なる人々の作業内容をそれぞれ分離できますが、"プロジェクトX用のすべてのブランチ"を見つけるのが難しくなります。 <a class="reference external" href="https://launchpad.net">Launchpad</a> はデータベースバックエンドを伴う素晴らしいウェブインターフェイスを提供していて、"view"をこのレイアウトのトップに追加することでこの欠点を補っています。 これはそれぞれの個人が "<code class="docutils literal notranslate"><span class="pre">~/public_html</span></code>" ディレクトリを持ち、そこで独自のウェブページを公開する個人用ホームページのモデルに近いです。 一般的に、集中型のプロジェクト用に共用リポジトリを作成するとき、個人単位で分割してからプロジェクト単位に分割することを望まないでしょう。 通常はプロジェクト単位で分割してから個人単位で分割するとよいでしょう。</p> </div> <div class="section" id="id5"> <h2>要約<a class="headerlink" href="#id5" title="このヘッドラインへのパーマリンク">¶</a></h2> <p>最後に、誰にとってもうまくいく唯一の命名規則はありません。 開発者の人数、新しいブランチが作成される頻度、ブランチのライフサイクルなどによって異なります。 自身に問いかける質問は次のとおりです:</p> <blockquote> <div><ol class="arabic simple"> <li>寿命の長い少数のブランチを作るか、もしくはたくさんの"ミニ"機能ブランチを作るか (加えて: ミニ機能ブランチをたくさん <em>作りたい</em> が現在のVCSでは苦痛なのでできないのではないか?)</li> <li>1人で開発しているのか、大きなチームか?</li> <li>チームであれば、一般的に全員が同時に同じブランチに取り組むことを計画しているか? もしくは人々が追跡することを想定した"安定"ブランチを持つか。</li> </ol> </div></blockquote> </div> </div> </div> </div> </div> <div class="sphinxsidebar" role="navigation" aria-label="main navigation"> <div class="sphinxsidebarwrapper"> <h3><a href="../index.html">Table of Contents</a></h3> <ul> <li><a class="reference internal" href="#">共用レポジトリのレイアウト</a><ul> <li><a class="reference internal" href="#svn-trunk-branches">"SVN形式" (<code class="docutils literal notranslate"><span class="pre">trunk/</span></code>, <code class="docutils literal notranslate"><span class="pre">branches/</span></code>)</a><ul> <li><a class="reference internal" href="#project-trunk"><code class="docutils literal notranslate"><span class="pre">project/trunk</span></code></a></li> <li><a class="reference internal" href="#trunk-project"><code class="docutils literal notranslate"><span class="pre">trunk/project</span></code></a></li> </ul> </li> <li><a class="reference internal" href="#project-branch-sub-branch">入れ子形式 (<code class="docutils literal notranslate"><span class="pre">project/branch/sub-branch/</span></code>)</a></li> <li><a class="reference internal" href="#dev-merged-experimental">ステータスによる種類分け (<code class="docutils literal notranslate"><span class="pre">dev/</span></code>, <code class="docutils literal notranslate"><span class="pre">merged/</span></code>, <code class="docutils literal notranslate"><span class="pre">experimental/</span></code>)</a></li> <li><a class="reference internal" href="#id4">日付/リリース/その他で種類分け (<code class="docutils literal notranslate"><span class="pre">2006-06/</span></code>, <code class="docutils literal notranslate"><span class="pre">2006-07/</span></code>, <code class="docutils literal notranslate"><span class="pre">0.8/</span></code>, <code class="docutils literal notranslate"><span class="pre">0.9</span></code>)</a></li> <li><a class="reference internal" href="#project-joe-foo-project-barry-bar">シンプルな開発者名 (<code class="docutils literal notranslate"><span class="pre">project/joe/foo</span></code>, <code class="docutils literal notranslate"><span class="pre">project/barry/bar</span></code>)</a></li> <li><a class="reference internal" href="#id5">要約</a></li> </ul> </li> </ul> <h4>前のトピックへ</h4> <p class="topless"><a href="organizing_your_workspace.html" title="前の章へ">作業スペースを構成する</a></p> <h4>次のトピックへ</h4> <p class="topless"><a href="setting_up_email.html" title="次の章へ">Eメールを設定する</a></p> <div role="note" aria-label="source link"> <h3>このページ</h3> <ul class="this-page-menu"> <li><a href="../_sources/user-guide/shared_repository_layouts.txt" rel="nofollow">ソースコードを表示</a></li> </ul> </div> <div id="searchbox" style="display: none" role="search"> <h3>クイック検索</h3> <div class="searchformwrapper"> <form class="search" action="../search.html" method="get"> <input type="text" name="q" /> <input type="submit" value="検索" /> <input type="hidden" name="check_keywords" value="yes" /> <input type="hidden" name="area" value="default" /> </form> </div> </div> <script type="text/javascript">$('#searchbox').show(0);</script> </div> </div> <div class="clearer"></div> </div> <div class="related" role="navigation" aria-label="related navigation"> <h3>ナビゲーション</h3> <ul> <li class="right" style="margin-right: 10px"> <a href="setting_up_email.html" title="Eメールを設定する" >次へ</a></li> <li class="right" > <a href="organizing_your_workspace.html" title="作業スペースを構成する" >前へ</a> |</li> <li class="nav-item nav-item-0"><a href="../index.html">目次 (2.7.0)</a> »</li> <li class="nav-item nav-item-1"><a href="index.html" >Bazaarユーザーガイド</a> »</li> </ul> </div> <div class="footer" role="contentinfo"> © Copyright 2009-2011 Canonical Ltd. このドキュメントは <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.4 で生成しました。 </div> </body> </html>