« Javaの可変長引数 | Main | IE7でwindow.close() »

2007.01.31

svkを使ってネットワーク外で同期

サーバ:Subversionリポジトリサーバ(Apacheを用いてhttp経由でアクセス)。
端末A:Subversionリポジトリサーバ(リモート)にアクセス可能。
端末B:Subversionリポジトリサーバ(リモート)にアクセス不可能。

 上記の状態において、端末Bでリポジトリを共用した開発を行いたい場合、svkを使用することである程度は対応可能。そもそも、こういう環境になるケース(リモートのリポジトリにアクセスできない環境での開発)がどの程度あるのか不明ではありますが。(^^;

  1. 端末Aにおいて、svkを用いてローカルミラー&ローカルブランチを作成する。
  2. 端末Aの.svkフォルダ(データ形式としてはSubversionの形式と同一)を端末Bにコピーする。このとき、コピー先のフォルダ名は.svkである必要はない(実際のリポジトリとなるlocalフォルダはそろえておいた方がよいが)。
  3. 端末Bにおいて、TortoiseSVNやSubclipse、Subversiveを用いて、コピーしたsvk\localリポジトリからチェックアウトする。
  4. 端末Bでコミットを行った場合、追加されたリビジョンに関してsvnadmin dumpを行う(svnadmin dump local -r xx:HEAD --incremental > svklocal.dat)。dumpを出力する際の開始リビジョン番号を間違えると危険だと思われるので注意。コミットフックを行って、リビジョンが1つあがるごとにdumpを行うようにしておくといいかもしれません。
  5. svklocal.datを端末Aに持って行き、svnadmin load local < svklocal.datで追加分を取り込む。
  6. 端末A上で、svk sync/svk pull(あるいはsvk smerge)/svk pushでローカルミラーとリモートの同期を行う。
  7. リモートとの同期等を行うと、おそらくリビジョンがあがるので端末A側でsvnadmin dumpを行い、そのファイルを端末Bでsvnadmin loadする。
  8. 以降、端末A/Bの間でdump&loadを行って同期をとる繰り返し。
 ※それぞれのファイルは、たとえばUSBメモリでコピーします。

 ちなみに、別の同期方法として、リポジトリのファイル形式がfsfsであるならば、追加されたリビジョンファイルのみをコピーするという手も使えるかもしれません。
 local/db/revpropsおよびlocal/db/revsフォルダ内で追加されたファイルをコピー。その際、local/dbフォルダ内のcurrentファイル(最新のリビジョン番号等を格納)もコピーする必要がありますが、これなら同じリビジョンを複数回コピーしてしまっても(上書きしてしまっても)特に問題は発生しないはず。

 ただし、端末Aと端末Bの同期をとる前にそれぞれの端末でコミットを行った場合(同一リビジョン番号で異なる内容のファイルが生成されてしまう)はこの方法は使用できないと思われる(dumpファイルを経由した場合はコンフリクトが発生しなければ何とかなるかも)。

 そういうわけで、注意して運用を行わないと、リポジトリの整合がとれなくなってしまう危険性があるので、もしこういう運用をしようとする人がいるのであれば、自己責任にて。

 なお、dumpを用いた方法と、リビジョンファイルをコピーした方法の併用は不可です。場合によっては、変なところでコンフリクトが発生し、サーバのリポジトリを期待せぬ状態でコミットしてしまう危険性があります。(無理矢理復旧させましたが(苦笑))

 もっとも、こんな運用を必要とする人はほとんどいないと思いますが(^^;。Subversionのリポジトリにアクセスできれば普通にsvkでローカルミラー(とローカルブランチ)を作成するだけでオッケーですから。こういう環境が必要となるのは・・・何らかの理由でネットワークへの接続を許可されていないPCで作業を行いたい場合くらいかなぁ?

|

« Javaの可変長引数 | Main | IE7でwindow.close() »

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/13639725

Listed below are links to weblogs that reference svkを使ってネットワーク外で同期:

« Javaの可変長引数 | Main | IE7でwindow.close() »