nDiki : svn:externals

svn:externals

Subversion の外部定義用プロパティ名。

設定

指定した URLのディレクトリを自動的に現在の作業ディレクトリの下に subdir という名前でチェックアウト/更新するようにする。

 svn propset svn:externals 'subdir URL' .

指定したURLのディレクトリを自動的に dir の作業コピーの下に subdir という名前でチェックアウト/更新するようにする。

 svn propset svn:externals 'subdir URL' dir

関連情報

スポンサード リンク

2004年3月4日 (木)

ドキュメント管理用 Subversion リポジトリ作成

新しく書くドキュメントを Subversion 管理してみる。 今後のドキュメントで共有(かつブランチする)マクロファイル等を分けて管理できるようにレイアウトを検討。

リポジトリ作成

自分の home の下 var/repos/doc を作成する。サーバ上で以下を実行。

 cd ~/var
 mkdir repos
 mkdir repos/doc
 chgrp doc repos/doc
 chmod g+ws repos/doc
 svnadmin create repos/doc

初期ディレクトリ構造作成

project-1 の report ドキュメント手始めに管理する。 今後他と共有する予定の texmf ディレクトリも別途用意。

クライアント上で以下を実行。

 mkdir /tmp/layout
 cd /tmp/layout
 mkdir project-1
 mkdir project-1/trunk
 mkdir project-1/trunk/report <-- report のファイルを置く
 mkdir project-1/branches
 mkdir project-1/tags
 mkdir texmf
 mkdir texmf/trunk
 mkdir texmf/branches
 mkdir texmf/tags
 mkdir texmf/trunk/texmf
 mkdir texmf/trunk/texmf/my-company <- 社内共有マクロファイル置き場
 svn import . svn+ssh://server/home/naney/var/repos/doc \
   --message 'Initial repository layout.'
 cd
 rm -rf /tmp/layout

外部定義プロパティを設定

report 作業ディレクトリの下に texmf/trunk/texmf を texmf として checkout するように、svn:externals を設定する。

 mkdir /tmp/work
 cd /tmp/work
 svn checkout svn+ssh://server/home/naney/var/repos/doc/project-1/trunk
 cd trunk
 svn propset svn:externals 'texmf svn+ssh://server/home/naney/var/repos/doc/texmf/trunk/texmf' report
 svn commit
 cd report
 svn update

これで、report の下に自動的に texmf が来るようになる。 他のドキュメントプロジェクトでも同様に svn:externals を指定すれば texmf が使えるようになる。 texmf のブランチや、ある時点のスナップショットを使いたい場合は svn:externals を変更すれば良い(はず)。

スポンサード リンク
[ 3月4日全て ]

2004年7月23日 (金)

プロジェクト関連ドキュメントを TeX

現在進行中のプロジェクトの一つがそろそろ大詰め。 ドキュメント書きに突入。 前回までは過去の方法を踏襲して MS Word ベースだったのだが、自分がマネージャになった今期からは全面的に TeX ベースへ移行させる。

LinuxWindows でそれぞれ

を用意。 Makefile は時間がなかったので GNUmakefile と Makefile を作って Linux 用と Windows 用の両方作ったのだが、後々面倒なので一本化したい。

TortoiseSVNsvn+ssh な svn:externals

以前 TortoiseSVN から svn+ssh で接続する際にユーザ名をURIに含めることで認証が通るようにしてみた。

しかし今日 svn:externals プロパティで外部定義の設定をしていてはたと困る。 svn:externals で指定するURI はリポジトリ利用者で共有するので、チェックアウトする時のURIのようにユーザ名を含める訳にはいかない。

で、さらっと調べたところ TortoiseSVNSSHクライアントの設定のところでユーザ名を指定できるようだ。 デフォルトで TortoisePlink.exe へのフルパスが設定されているが

 前略\TortoisePlink.exe -l ユーザ名

のようにすればユーザ名を指定できる。

一つのリポジトリにアクセスするだけならとりあえずこれでしのげそうだ。

それにしても更新をかけた際に外部定義毎にパスワードの問い合わせがあるので面倒(外部定義先が同じURIであっても)。

やはりきちんとセッションを保存しておくようにせねば。

それから、TortoiseSVN は 1.0.4 から 1.0.8 に上げておく。

[ 7月23日全て ]

2005年1月31日 (月)

外部定義か作業ディレクトリを分けるか、trunk にブランチ

Subversion のリポジトリのレイアウトを思案中。

 repos
  |
  +- branches
  |
  +- tags
  |
  +- trunk
      |
      +- project
      |    |
      |    +- 2004
      |    |
      |    +- 2005
      |
      +- texmf

という構成がある。 project に年別のサブブロジェクト 2004、2005 がある。 texmf は repos 以下で共有したいマクロディレクトリ。

問題は各サブプロジェクトでどうやって texmf を共有するか。 ここで 2005 + texmf を使用する際には 2004 まで一緒に作業ディレクトリにチェックアウトしたくないとする。 texmf は各プロジェクトの共通部分で随時改良される。 これらの改良は各プロジェクトで共有したい。

ただしプロジェクトの tag を打つ場合はその時点で使用されている texmf もセットで tag を打っておき、その tag をチェックアウトする事でサブプロジェクトのセットを再構築できる必要がある。

作業ディレクトリを2つチェックアウトする方法

 trunk/project/2005
 trunk/texmf

の2つをチェックアウトする。2005 ディレクトリからは ../../texmf で参照するようにする。

利点
  • texmf を一括管理できる。
欠点
  • 作業者が2つの作業ディレクトリをこの構成でチェックアウトすることを知っている必要がある。間違えて違うURLをチェックアウトしてしまうかもしれない。
  • 更新も毎回2つのディレクトリでする必要がある。texmf の update 忘れる等のミスをおかしやすい。

tag を打つ場合は

 tags/release-1.0.0/project/2005
 tags/release-1.0.0/texmf

と2つをとりまとめる必要がある。

サブプロジェクトにブランチを作る方法

texmf を trunk/project/2005/texmf のようにコピーする。

 trunk
  |
  +- project
       |
       +- 2005
           |
           +- texmf

2005 ディレクトリからは texmf で参照するようにする。

利点
  • チェックアウトする人間は trunk/project/2005 をチェックアウトするだけで良い(texmf サブディレクトリは再帰的にチェックアウトされる)。
  • trunk/project/2005 の tag を作るだけで、閉じたスナップショットを作れる。
  • texmf が他のプロジェクトと独立する。
欠点
  • trunk/project/2005/texmf から trunk/texmf へのマージ、また逆へのマージを適宜行って同期しておく必要がある。骨が折れる。
  • trunk の下にブランチ的な要素があるのがちょっと気持ち悪い。

外部定義(svn:externals)を使う方法

trunk/project/2005 の svn:externals 属性として trunk/texmf のURLを指定し trunk/project/2005/texmf となるようにする。

利点
  • チェックアプトする人間は trunk/project/2005 をチェックアウトするだけで良い(texmf 外部定義は自動的にチェックアウトされる)。
  • texmf を一括管理できる。
欠点
  • texmf 以下は別として扱われるので、更新処理などのオーバーヘッドが結構ある(遅い)。
  • tag 打ちが面倒

tag を打つ際は

 tags/release-1.0.0/project/2005
 tags/release-1.0.0/texmf

と2つをとりまとめた上、tags/release-1.0.0/project/2005 の svn:externalsURLを書き換える必要がある。

将来リポジトリが移動してURLが変わった際も(実体は同じリポジトリにあるにもかかわらず)全てのURLを書き換える必要がある。

あるいは tag を打つ際に svn:externals をクリアし tags/release-1.0.0/project/texmf とコピーする方法もある。

どれにするか?

去年は外部定義を使用する方法で運用してみたが、update が遅い等それほど使い勝手が良くなかった。

今回はブランチ方式にしようかなと思う。 マージが面倒なようなら、次回は一番上の方式で。

[ 1月31日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.0601699999999999s / load averages: 0.54, 0.79, 0.75
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker