なか日記

一度きりの人生、楽しく生きよう。

リポジトリの構成を悩み中

いろんな方が悩まれているように、自分もリポジトリ構成について悩んでます。
とりあえず、これが一番いいのかなぁと思う構成ができたので晒しておきます。

目的

最新の製品コード/ドキュメントと共に、他のプロジェクトに提供したコード/ドキュメントを一元管理する

具体的には

以下の様なことが出来ればいいかなと

  • 最新の製品コードとドキュメントを管理したい
  • プロジェクトが立ち上がる毎に最新の製品コードをカスタマイズして提供を行う
    →最新の製品コードから分岐させて管理したい
  • 提供先のプロジェクトで行った改修を最新の製品コードに取り込みたい

リポジトリ構成案

考えたのは以下のような構成。

root
 ├trunc
 │ ├doc
 │ └src
 ├branches
 │ ├○○向け
 │ │ ├doc
 │ │ └src
 │ ├△△向け
 │ │ ├doc
 │ │ └src
 │ └改修中
 │    └issue01
 │       ├doc
 │       └src
 └tags
    ├○○向けv1.00
    │ ├doc
    │ └src
    ├○○向けv1.01
    │ ├doc
    │ └src

各ディレクトリの使い方

branchesの使い方がプロジェクト単位にみればtrunc的な扱いになってるのでどうなの?って気はしますが、これくらいしか思いつきませんでした。

trunc
  • 常に製品の最新バージョン(もちろん、正しく動くもの)を格納する
branches
  • プロジェクトが立ち上がった時点で最新のバージョンをtruncから登録する。(上図でいうと、○○向けや△△向け)
  • プロジェクト向けのカスタマイズは事項の「branches/改修中」で行う
branches/改修中
  • 製品の改修、もしくはプロジェクトへ提供したコードに対して修正を行う場合は、ここ配下にブランチを切って作業を行う。
    改修が終われば元のブランチにマージする。
tags
  • リリースを行ったバージョンを都度登録する

各プロジェクトからtruncへのマージ

各プロジェクトで発生した改修内容を最新の製品にも反映させたい。これはバージョン指定してマージすればできるんだろうか?やったことないのでよくわかりません。
最悪、手作業でコピペすればいいわけですが、せっかくならSubversionの機能の中で何とかしたいですね。