人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

svkでリポジトリを2重に作るのはなぜですか?

http://mono.kmc.gr.jp/~yhara/w/?SvkTutorial
このページで
『これには決してコミットしてはいけません。 なんでかは知らないけどそういうもんだそうです。』
と言っている部分です。

できれば、svkの動作原理と一緒に説明してくださると助かります。

よろしくお願いします。

●質問者: urekat
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:svk コミット リポジトリ 原理
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● たも
●27ポイント

svk 使っていないのですが、こういうことだと思います。

まず普通の svn がどうなっていて、svk がどう違うか思い出してみてください。

svn でも、本家とローカルコピーを持つわけです。で、両方のリビジョン番号は常に同じ意味を持ちます。

svk では、本家とローカルという、ふたつの svn リポジトリを同期させなくてはなりません。ローカルが単なるコピーではなく、自分でコミットできるリポジトリであるという点が svk の利点です。それでリビジョン番号が同じでも違うものを意味するわけですね。

さて、svn では svn diff とすればローカルへの変更 (未コミット) を確認することができます。.svn に本家のコピーがあるからです。

でも、svk のように手元でコミットしてしまった場合、本家との違いを調べるための元データは .svn には存在しないことになります。手元にあるのはローカルコピーではなく、ちゃんとした svn リポジトリであり、すでに変更はコミットされているからです。

では、本家リポジトリと手元リポジトリの違いをどう見るか。いちいちネットワークを通すのであれば cvs 時代に逆戻りです。それで mirror が必要になる、というわけです。たぶん。

こんな推測ですが、どうでしょうか。

実際、Mercurial (hg) は二重にリポジトリを持ちません。ふつーに commit して pull して push です。これは最初から分散に関するデータを持つ構造になっているからでしょう。svk は svn というしがらみがあるので、こうなってしまったということではないかと思います。svk が独自フォーマットになっていればもっと単純にできたけど、svn co で取り出せる互換フォーマットなので面倒なことになってる、と。

svn   svk

本家  本家
|   |
.svn  mirror
|   |
wrkdir localrepo
◎質問者からの返答

svn: 本家 --- .svn --- wrkdir

svk: 本家 --- mirror --- localrepo --- wrkdir

mirrorとlocalrepoのリビジョン番号の増え方がバラバラだからってことですね。

(本家とmirrorのリビジョン番号は全く同じようにしておかなければならない<たぶん実装の都合)

もし間違ってmirrorにコミットしちゃうとどうなるんでしょうね。。。


2 ● KUROX
●27ポイント

http://itpro.nikkeibp.co.jp/article/Keyword/20070207/261213/

>svkを使えば,ローカル・マシン上に全ソース・ファイルを含むリポジトリを保存し,

>オフライン時にも開発が続行できます。オンラインになったときに他のリポジトリと

>履歴を整合させて利用します。

localrepoからみると、mirrorが、svn で言うと本家に当たります。

そのためオフライン時にもコミットが可能です。オンラインになった時点で

mirrorと本家SVKつじつまあわせをします。



svk

本家SVK

mirror

localrepo

◎質問者からの返答

svkをインターネット上の外部リポジトリのキャッシュサーバとして使おうとしています。

この場合は、mirrorをreadonlyに設定しておけばlocalrepoは作らなくて良さそうですよね。


3 ● znz
●26ポイント

svkの仕組み的に禁止されているというわけではありません。

自分専用のリポジトリを mirror していて、mirror のところから直接 checkout してそこに commit して使っていますが、commit するとすぐに mirror 元の方のリポジトリと sync するようなので、

- 余分な.svnディレクトリができない

- 過去の履歴もローカルにある

などの利点が不要なら直接 svn を使って checkout して使うのと変わらないので、そういう使い方はあまりされていないのではないでしょうか。

他にもオフラインになるときに作業用ブランチを作ってそっちに commi tするようにして、オンラインに戻ったときに作業用ブランチから push して mirror した方に戻るという使い方もあるようですが、まだそこまでしたことはないです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ