Subversionの記事一覧

Subversion リポジトリの結合

結合でもMergeでも統合でも何でも良いんだけど。

プロジェクトによってリポジトリを使い分けてたけど、思い切ってひとつにまとめてみた。チームなら複数リポジトリもアリなんだろうけど、個人で使うならひとつで問題になる事は無さそう。逆に「このプロジェクトはどこのリポジトリだっけ?」ってな事態に陥るので「個人利用なら単一リポジトリ」を推奨しますよ?

そんなわけでGoogleさんにお伺いを立てつつコマンドの調査。世の中的にはLinuxでリポジトリを立てているようでWindowsの情報が見当たらなかったけど、やる事的には一緒だった。

事前にTortoiseSVNを使って、統合先のリポジトリにfugeフォルダ作っておいてね。で、Windows+Rで”cmd”開いて、こんな感じでコマンド入力。

> svnadmin dump D:\repos\srcProj > hoge.proj
> svnadmin load D:\repos\dstProj --parent-dir fuge < hoge.proj

元のリポジトリ「D:\repos\srcProj」からdumpで「hoge.proj」を抜き出して、統合先の「D:\repos\dstProj」にloadするだけ。

注意点が1つあって、ただの load だとリポジトリトップに展開されちゃうのよ。なので事前にload用のfugeフォルダを作っておいて、parent-dirオプションでfugeフォルダを指定してやる。こうするとfuge配下にsrcProjの内容が読み込まれるのよ。

今回は既存のリポジトリに統合したけど、複数リポジトリを新規リポジトリにまとめるんでも、やることはいっしょ。元のデータをdumpして、新しいところにloadしてやる。load位置はparent-dirで調整。簡単でしょ?

XreaはSubversionが使用可能

入門Subversion―Windows/Linux対応

何の気なしに「xrea Subversion」でググッたら、最近のxreaサーバはSubversionがインストールされているらしい。さっそく自分アカウントで”svn help”したら、ヘルプメッセージが表示されるよ!

これ幸いと”svnadmin create repos”でリポジトリを作成。TortoiseSVNの接続設定に手間取ったけど「XREA、sakuraサーバでのTortoiseSVNの設定」を読んで解決。

曰く、TortoiseSVNのSSH クライアント設定を”TortoisePlink.exe -ssh -l [ユーザー名] -pw [パスワード]”に、リポジトリアドレスを”svn+ssh://www.hide10.com/virtual/hide10/repos”にすれば繋がるみたい。

常用していたリポジトリをサーバにコピーして、正常に接続できる事も確認できたし、これでハッピーSubversionライフ!と思ってたのに…客先ではsshの接続が出来ないことが判明 orz 今まで試してなかったけど、ポートが塞がれてるらしくて ssh で出て行けない。

もしこれで ssh が通ってたら、ファイル管理が楽になってたのにな~。ちょっと残念です。

svkを使ってSubversionの分散リポジトリを実現する

Windows環境でSubversionTortoiseSVNsvkを使い、Subversionの分散リポジトリを構築してみました。環境構築時の各バージョンはSubversion 1.5.4,TortoiseSVN 1.5.5,svk-2.2.0です。

作業では「subtech – MisuzillaSubtechImpl – Windows(TortoiseSVN付き) で svk を使う」と「svk – 気の向くままに・・・ – livedoor Wiki(ウィキ)」を参考にさせて貰いました。

SVKのインストール

Windows用インストーラをダウンロードして、SVKのインストールを行います。「HomePage – SVK Wiki」から辿るか、「SVKWin32 – SVK Wiki」から取ってきてください。

インストール途中で「Change the environment for all users?」(全てのusersで使用するか?)と言う質問が出るので、良いように回答します。インストールが終わると、自動的にインストールフォルダにパスが通されます。

環境設定

インストール後に1回だけ「svk depotmap –init」コマンドを実行し、ローカルリポジトリの場所指定を行います。

  1. コマンドプロンプトを開き、「svk depotmap –init」を実行
  2. 途中でメモ帳が開き、レポジトリの場所を決めるコンフィグファイルを編集しろと言ってくるので適宜編集。
  3. そのまま閉じた場合は「Repository C:\Documents and Settings\username\.svk\local does not exist, create? (y/n)」というメッセージが表示されるのでyを入力。

初期設定後に別の場所にSVKリポジトリを作りたくなったら、TortoiseSVNで任意の場所にリポジトリを作ったあと、”svk depot –relocate hoge”コマンドで「hoge」リポジトリに変更できます。

“svk help depot”で depotmap 関係のヘルプが表示されますので参照あれ。

環境設定、その2

使用するリポジトリを、ミラー元からローカル環境にミラーリングします。

使用するコマンドは”svk mirror”, “svk sync”, “svk cp”の3種類で、それぞれのコマンドの使い方は以下の通りです。

svk mirror <ミラー元> <ローカルのミラー先>
svk sync <ローカルのミラー先>
svk cp <ローカルのミラー先> <ローカルの実使用場所>

上記のコマンドを使い、ミラー元のリポジトリ「SVNserver/hoge」を、ローカルの「//mirror/hoge」にミラーリングし、更にそのレポジトリを「//hoge 」にコピーします。

リポジトリのコピー例は以下の通りです。

svk mirror svn://SVNserver/hoge //mirror/hoge
svk sync //mirror/hoge
svk cp //mirror/hoge //hoge

“svk sync”時、”–skipto HEAD”オプションを使うと最新バージョンのみミラーリングするようです。ミラー元のリビジョンが莫大な場合は、適宜skipした方が良いのかも知れません。

ミラーリングしたリポジトリを、更にコピーして使う理由は良く分かっていません。おまじないかな?

TortoiseSVNでチェックアウトする

ここまででローカルにSVKのリポジトリができました。あとはTortoiseSVNを使ってローカルbranchをチェックアウトしましょう。

ローカルリポジトリの場所が初期設定のママで、且つ上記の例にしたがってミラーリングすると、チェックアウトすべきリポジトリは下記の場所にあるはずです。

“file:///C:/Documents and Settings/username/.svk/local/hoge”

上記フォルダをチェックアウトすれば、まるでミラー元のリポジトリをチェックアウトしたかのように動作するはずです

日々の運用

日々の運用イメージはこんな感じです。

  1. チェックアウトしたフォルダで作業を行い、変更や追加などを行う。
  2. 必要に応じてTortoiseSVNで、ローカルリポジトリにコミット。
  3. 必要に応じてローカルをミラー元に反映させる。コマンドは以下の通り。

    svk push –verbatim <ローカルの実使用場所>
    svk push –verbatim //hoge

‘verbatim’オプションを使うと、ローカルにコミットした時のコメントを使って、ミラー元にコミットしてくれる。

push用バッチファイルを作っておくと良いかも。

他人の作業をローカルに反映させる

ミラー元から他人の作業内容を取得し、ローカルリポジトリに反映します。

  1. ローカルと同期させる。これもpull用バッチファイルを作っておくと良いかも。

    文法:
    svk sync <ローカルのミラー先>
    svk pull <ローカルの実使用場所>
    例:
    svk sync //mirror/hoge
    svk pull //hoge

  2. TortoiseSVNで「更新」を実行

ここまでで重要なことは”svk push”と”svk sync”実行時以外、日常的作業ではミラー元に接続せずにローカルで作業が行えることです。

疑問点

まだ使い慣れていないので、良く分かっていないところもあります。

  • コンフリクト時の正しい解決方法が良く分からず。
    • 複数コミットを一括でpushした途中でconflictが発生している?
    • editでそれっぽく直したあと、acceptすれば良さそう?
    • 最終的にはミラー元とローカルで同じファイルになった?
  • TortoiseSVNの「再配置」でリポジトリのミラー先とリモートを切替えられない。

Subversion活用中。Windowsサービス登録、複数リポジトリ運用など

Subversion実践入門:達人プログラマに学ぶバージョン管理(第2版)

SVN Service」ってのを使ってサービスに登録する事に成功。でもこんなの使わなくても、WindowsXPあたりに付いてくるsc.exeってのを使えばServiceをコントロールできることが分かりました。

複数リポジトリの運用にも成功。”svnadmin create hoge”でリポジトリを作るのは良かったけど、svnserver起動オプションの”-r”が良くなかったみたい。”-r”オプションでリポジトリの仮想ルートを設定できるんだけど、これでリポジトリを直接指定してたのが間違いだった。分かってみれば当たり前なんだけど、ルート=リポジトリなので他のリポジトリが見えなくなってたのよね。

結局、仮想ルートを一つ上のフォルダに設定変更して、そのフォルダ配下に第二リポジトリを作成することで解決。クライアント側は、”svn://server.address/hoge” みたいにサーバアドレス+リポジトリアドレスを入力する事で、リポジトリを選択できるようになりました。

追記:何だか分かりにくい説明だと思ったので追記。-rで指定する仮想ルートを”c:\repos”、リポジトリ1を”hoge”、リポジトリ2を”fuge”とする。

まず c:\reposで”svnadmin create hoge”、”svnadmin create fuge”してリポジトリを作成。その後 -r オプションに”c:\repos”を指定すれば複数リポジトリの運用が出来る。

上記設定後、クライアントから”svn://server_address/hoge”や”svn://server_address/fuge”に接続すれば、それぞれのリポジトリが使用可能。”svn://server_address/”で繋いでから降りていく事は出来ないので注意が必要です。

まだブランチとマージが良く分からん。コマンドの意味は分かるんだけど、実際にやってみると何だかうまく行かないなぁ…TortoiseSVNも使いこなしてるとは言いがたいし、もうちょっと頑張ってみるかね。

Subversionを使ってみた

CVSだとディレクトリやファイル消去の履歴が残らないと言うのが分かって衝撃を受けてたら、Subversionなるモノが存在してたのね。

さっそくWindows版のSubversionとTortoiseSVN+日本語パックを導入してお試し中。何とかネットワーク越しにsvn://で繋がるようにはなりました。

でもサーバ側の設定がまだ良くわかんない。W2Kだと起動するたびに”svnserve -d -r c:/hogehoge”しないといけないのか?とりあえずバッチファイル書いて起動タスクにおいてみたけど、DOS窓が開きっぱなしになる…あと複数リポジトリを立ち上げるにはどうすればいいのかが良くわかんないなー。もうちょっと遊んでみるか。

「Berkeley DB」をバルキリーデータベースと読んでしまったのは内緒。正しくはバークレーDBなのね。

「Sub + Version」と言うわけでもなく、転覆と言う意味の英語らしい。