Top > システム > Subversion

#setlinebreak(on)

#menubar_google_AdSense(ca-pub-3866735605426144,5022755888,728,90)


*目次 [#ead5c928]
#contents

*TortoiseSVNのインストール [#k687a623]
+http://tortoisesvn.net/ から
TortoiseSVN-*.msi  (TortoiseSVN本体)
LanguagePack_*.msi (日本語化パック)
の2つをダウンロードする。
+TortoiseSVN-*.msi をダブルクリックして、本体のインストーラを起動
『Custom Setup』のところまで進んだら、 command line client toolsをインストールする設定に変更する。
これでコマンドライン版svnが使用可能になる。
(↓command line client tools のところをクリック>Will be installed on local hard driveをクリック)
&attachref(tsvn_inst_001.png);
(↓この状態になればok)
&attachref(tsvn_inst_002.png);
+最後まで進めて、インストールを完了させる。
+LanguagePack_*.msi をダブルクリックして、日本語化パックのインストーラを起動
+特にオプション等も無いので、そのままインストールを完了させる。

*TortoiseSVN TIPS [#g099f73f]
**オーバーレイアイコンが表示されなくなったら [#i9b0470b]
-再度インストーラを立ち上げて、''「修復(Repair)」''を実行してみる。
-レジストリのオーバーレイアイコン部を確認して、数がオーバーしていないかを確認する。


*subversionクライアントコマンドライン版のインストール [#pb140945]
*TortoiseSVNのインストールオプションで、コマンドラインをインストールした場合、この単体パッケージをインストールする必要はありません。
ダウンロードは [[http://alagazam.net/>http://alagazam.net/]] から。
インストーラ版か、バイナリ版のどちらかを導入する。
**インストーラ版 [#gd5680c5]
+バージョン1.7.0なら「Setup-Subversion-1.7.0.msi」をダウンロードする
+ダウンロードしたファイルをそのまま実行して指示に従ってインストールする。
+コマンドラインを立ち上げ、
 svn --version
と打ち込んで、バージョンやらなんやらが表示されていればインストール成功。
**インストーラ無しのバイナリ版 [#s2770a5d]
+バージョン1.7.0なら「svn-win32-1.7.0.zip」をダウンロードする
+解凍後、インストールしたいところにコピーする。~
(例)C:\Program Files\subversion~
*svn-win32-1.7.0はリネームしてsubversionとした。
+C:\Program Files\subversion\bin にパスを通しておく。
+コマンドラインを立ち上げ、
 svn --version
と打ち込んで、バージョンやらなんやらが表示されていればインストール成功。


*CORESERVERとのSSH接続メモ(PuTTY関連の設定) [#uf64a62a]
初期設定
-TortoiseSVN>設定>ネットワーク>SSHクライアント
 C:\Program Files (x86)\PuTTY\plinkw.exe
を設定する。設定しないと、最初使えててもいつか使えなくなる。

PC起動してからのタスク
+SSHホストをCORESERVERに登録
+pagentでキーを登録
 start "svn用キーの登録" "C:\Program Files (x86)\PuTTY\pageant.exe" "D:\PuTTY_KEY\id_rsa.subversion.ppk"

 

*リポジトリの新規作成 [#l6670b6a]
-シェルでリポジトリを作成したいディレクトリに移動し、svnadmin を実行
 $svnadmin create [リポジトリ名]

*リポジトリの削除 [#h38ed602]
-svnadmin create で作成したリポジトリのフォルダを単純に消せばok。


*リポジトリのコピー・バックアップ [#l8d175ab]
-svnのリポジトリを丸ごと別のリポジトリにコピーする方法の覚え書き。~
サーバー間の移動等で使用します。~
下記の例ではunfuddleのリポジトリからコアサーバーのリポジトリに移動させています。~
ユーザ名は user でリポジトリ名は repos とします。~

 バックアップ先のリポジトリ作成
 $svnadmin create repos

 フックの編集
 $cd repos/hooks
 $cp pre-revprop-change.tmpl pre-revprop-change
 $chmod +x pre-revprop-change
 $vi pre-revprop-change

 #!/bin/sh
 exit 0

 sync準備
 $svnsync init file:///virtual/user/svn/repos/ http://user.unfuddle.com/svn/user_repos

 sync開始
 $svnsync sync file:///virtual/user/svn/repos/

 途中で失敗したらロックを解除して再び svnsync すれば途中から再開できる
 $svn propdel svn:sync-lock --revprop -r 0  file:///virtual/user/svn/repos/
 $svnsync sync file:///virtual/user/svn/repos/


#setlinebreak(on)

*ベンダブランチ [#x40bf5ea]
*この項はまだ書きかけです。

ベンダブランチは、外部のライブラリを自分でカスタマイズする場合に、マージする手間を最小限に抑える管理方法です。
外部のライブラリを自分でカスタマイズしない場合はわざわざベンダブランチで管理する必要ありません。
ざっくりと言うと、ベンダブランチは、新しくなった外部ライブラリをプロジェクトに取り込む際、自分で修正した箇所とのマージをやりやすくする管理方法です。
**今回のプロジェクト構成 [#a66d0c35]
この説明で使用するプロジェクトの構成はこんな感じです。
 root        // プロジェクトルート
 ├application   // アプリケーションのルート 
 │├src      // ソース
 ││├main.cpp
 ││├...
 ││
 │└vendor     // プロジェクト内ベンダのルート
 │ └HogeLibrary // プロジェクト内HogeLibraryのソース(自分で修正する可能性がある)
 │  ├a.txt
 │  ├b.txt
 │  └c.txt
 │
 └vendor      // ベンダのルート(これ以下のファイルは、外部から取り込むだけで、自分で修正はしない)
  └HogeLibrary  // HogeLibraryを取り込むルート
   └ver.1.0.0  // 取り込んだHogeLibraryのバージョン1.0.0
    ├a.txt
    ├b.txt
    └c.txt
-applicationというプロジェクト。
-applicationフォルダ以下にあるHogeLibraryを自分でカスタムする可能性があるので、HogeLibraryをベンダブランチで管理します。
-root\vendorフォルダ以下は、外部からファイルを取り込むだけで、自分でファイルを修正したりすることはありません。


**リポジトリの構成 [#ubd56c75]
以下がこのプロジェクト始動時のリポジトリのフォルダ構成です。
&attachref(vendor_branch001.PNG);
trunk\vendor\HogeLibrary は現在使用しているバージョンのHogeLibraryがそのまま入ってます。
vendor\HogeLibrary は、リポジトリにフォルダを掘ってあるだけです。今の段階では何もファイルは存在しません。次の項で内容を構築します。
**ベンダブランチ管理準備 [#c75a1d04]
HogeLibraryをリポジトリvendor\HogeLibraryにインポートします。
-ローカルのroot\vendor\HogeLibrary\ver.1.0.0 フォルダを右クリック、TortoiseSVNでインポートします。
&attachref(vendor_branch002.PNG);
-インポート先はリポジトリの vendor/HogeLibrary/current です。currentは、現在使用しているバージョンですよという意味です。
&attachref(vendor_branch003.PNG);
&attachref(vendor_branch004.PNG);
-currentをローカルにチェックアウトします。ローカルのroot\vendor\HogeLibrary内で右クリックして、SNVチェックアウトします。
&attachref(vendor_branch005.PNG);
&attachref(vendor_branch006.PNG);
-チェックアウトが成功すると、ローカルにcurrentフォルダが作られます。
&attachref(vendor_branch007.PNG);
-次に、このcurrentをHogeLibraryのver.1.0.0としてタグ付けします。このタグ付けがベンダブランチでは重要です。
-currentフォルダを右クリックで、TortoiseSVN>ブランチ/タグを選択します。
&attachref(vendor_branch008.PNG);
-「リポジトリ内で最新のリビジョン」をチェックしておきます。
-ログメッセージには、バージョンの説明を記述します。
&attachref(vendor_branch009.PNG);
-タグ付けが成功すれば、下記のようなダイアログが出ます。注意と書いてますが、失敗している訳ではないので気にしないでください。
&attachref(vendor_branch010.PNG);
-この段階で、リポジトリはこんな感じになっていると思います。
&attachref(vendor_branch011.PNG);
-現時点で以下の3つのリポジトリのフォルダ内容は同じです。
--trunk\vendor\HogeLibrary
--vendor\HogeLibrary\current
--vendor\HogeLibrary\ver.1.0.0
-ここまででリポジトリの準備は完了です。


**ベンダのソースを修正したい時 [#r3dad1c8]
開発を進める中で、HogeLibraryをカスタムしたい場合が出ると思います、この時、
trunk\vendor\HogeLibrary に対して修正して、普通にコミットしても大丈夫です。


**ベンダの更新 [#r88983a3]
この項は書きかけです。

**前準備 [#rd7d3c97]
perlスクリプトの実行環境が必要です。
ここではActivePerlを使用します。
ActivePerlのダウンロードは以下から可能です。
http://www.activestate.com/activeperl/downloads
他のperl環境でも問題無いと思います。


**構成 [#q7b687eb]
リポジトリはこんな感じの構成にします。
 branches
 tags
 trunk
   Lib
     HogeLib
 vendor
   HogeLib
     current
     ver1.00
current が現在使用されているもので、他はタグです。ベンダー更新の際にver1.00などのバージョンが分かる名前でタグを保存します。
初回にもver1.00などの名前でタグを作っておきます。

trunk\Lib\HogeLib が実際アプリ側で使用しているライブラリになります。
trunk\Lib\HogeLib に修正を加えても問題ありませんが、vendor側で削除されたファイルに変更を加えた場合は手動でマージになりそうです。

vendor\HogeLib を更新する際は以下のような手順を踏みます。
更新には、 svn_load_dirs.pl というスクリプトを使用します。
コマンドはこんな感じです。

 D:\project\VendorBranchTest\vendor>perl svn_load_dirs.pl -t v2 -message v2 http://hogeserver/svn/VendorBranchTest/vendor/HogeLib current D:\project\VendorBranchTest\HogeLib

 -t オプションで v2 タグを生成。
 -message オプションで "v2" というコメントをsvnに残す。
 http://hogeserver/svn/VendorBranchTest/vendor/HogeLib はそのライブラリのベンダーブランチリポジトリのルートを指定。
 current はルートから見た時の、インポート対象のフォルダ。
 D:\project\VendorBranchTest\HogeLib は更新されたライブラリのローカルパス。絶対パス指定?svnで管理されているフォルダでも大丈夫そう。.svnフォルダは無視されていた。

*チェックアウトの深さ設定 [#j4b61bcd]
例えばリポジトリがこんな感じで、、、
 Trunk
   ├ bg
   ├ model
   ├ param
   │   ├ bin
   │   ├ text
   │   │   ├ a.txt
   │   │   ├ b.txt
   │   │   └ c.txt
   │   └ xx
   ├ script
   └ sound
作業コピーにはparam\textフォルダとscriptフォルダしか必要ないといった場合に、深さを設定することで実現できる。
コマンドラインの場合こんな感じ。
 svn checkout --depth=immediates     http://---.com/svn/Trunk C:/work/Trunk
 svn update   --set-depth=immediates C:/work/Trunk/param
 svn update   --set-depth=infinity   C:/work/Trunk/param/text
 svn update   --set-depth=infinity   C:/work/Trunk/script
更新するときは
 svn update C:/work/Trunk
でOK。
深さを設定しなおしたいときは、
 svn update   --set-depth=infinity   C:/work/Trunk/sound
のように svn update に --set-depth オプションを指定して再設定することができる。
(筆者的には empty よりimmediates の方が管理的に好みなので immediates で説明してます)

TortoiseSVNの場合は
+Trunkをチェックアウトする際、『チェックする深さ』を『直接の子階層(フォルダを含む)』にする。
+Trunk\param 右クリック>TortoiseSVN>特定のリビジョンへ更新 をクリック。
+『更新の深さ』を『直接の子階層(フォルダを含む)』にしてOK。
+Trunk\param\text も上記と同様に特定のリビジョンへ更新をクリック。
+『更新の深さ』を『再帰的』にしてOK。
+Trunk\script も上記と同様に特定のリビジョンへ更新をクリック。
+『更新の深さ』を『再帰的』にしてOK。

という感じ。

*メモ [#q9421063]
**『Expected format '3' of repository; found format '5'』エラーへの対処。 [#sc7771df]
:エラーが発生するタイミングと症状|sshでリポジトリアクセス時に『Expected format '3' of repository; found format '5'』というエラーと共にリポジトリにアクセスできない。
:エラーの原因|「リポジトリはフォーマット5で作られてるけど、フォーマット3でアクセスしてますよ。」という意味。~
svn+ssh接続時に元々コアサーバー側にインストールされている古いsvnserveを見に行ってしまっているのが原因らしい。~
自分でSubversionを導入してもsshで接続するとコアサーバー側のsvnserve(古いバージョン)を見てしまう様子。
:解決方法|sshで接続時に、自分でインストールしたsvnserveを見てもらうよう設定を変更する。~
新たに公開鍵、秘密鍵を生成し、~
.ssh/authorized_keysファイルに以下のような感じでコマンドを指定して公開鍵を登録する。
 command="/virtual/user/local/subversion/bin/svnserve -t" ssh-rsa AAAAB3NzaC...
こうすることで、svnserveが差し変わる。~
後は、秘密鍵をpageantなりに登録してTortoiseSVNでアクセスすればok。
:参考サイト|
http://subversion.tigris.org/faq.ja.html#ssh-svnserve-location
**コマンドライン版svnでssh接続できない。 [#v0833317]
:エラーが発生するタイミングと症状|コマンドライン版svnで、sshでリポジトリアクセス時に~
『svn: トンネルを作成できません: 指定されたファイルが見つかりません。』~
というエラーが出てsvn status 等が実行できない。
:エラーの原因|ssh接続の設定に不備がある為リポジトリにアクセス出来ない。
:解決方法|SVN_SSHという環境変数をシステム変数に追加する。~
 変数名:SVN_SSH
 変数値:C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe
      (区切り記号は"\"ではなく"/"(スラッシュ)にする必要がある。)
**公式FAQ [#i7a7b90f]
-http://subversion.tigris.org/faq.ja.html


**参考サイト [#pf4df3d4]
-http://gyahahaha.s51.coreserver.jp/DoldoWorkz/?Subversion%2FWindows%E3%81%A7%E4%BD%BF%E3%81%86(TortoiseSVN)#jd7774ee
-http://www.popod.net/serversmanvps/

    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS