#author("2017-11-18T20:31:08+09:00","default:wikiwriter","wikiwriter")
*目次 [#t3cd46b1]
#contents

*関連ページ [#jbf9139a]
-[[TortoiseSVN]]
-[[svnbook]]

*参考情報 [#df55d0bc]
-[[./Windows]]…Apache for Windowsで使う場合
-[[./Windows1.7]]…Apache for Windowsで使う場合
*設定 [#b6a4fb9c]


**常に無視するファイルを指定する [#e2b39c5e]
-"~/.subversion/config"で設定する。例えばXcodeのプロジェクトで無視するファイルは次のように指定する。
 global-ignores = *.o *.lo *.la .*.rej *.rej .*~ *~ .DS_Store *.mode1 *.mode1v3 *.pbxuser *.perspectivev3 xcuserdata project.xcworkspace build #*# .#*

※)Xcode4でxcuserdata, project.xcworkspace を追加。
*運用 [#oaa2239f]
**作業コピーのリポジトリURLを変更する [#p39d1867]
-同一リポジトリの中でパスが変わった場合svn switchを使う。例えば管理者がhttp://sample.com/tool/demoにあったdemoプロジェクトを、http://sample.com/new_tool/demoに移動した場合、次のコマンドで追随できる。
 svn switch http://sample.com/new_tool/demo
-リポジトリのホストやスキーマが変わった場合、svn switch relocateを使う。http://sample.com/tools/demoがhttp://newsample.com/tools/demoに変わった場合、次のコマンドを使用する。
 svn switch --relocate http://sample.com http://newsample.com


※TortoiseSVNを使う場合は、どちらも再配置でいける([[cl.pocari.org - Subversion で作業コピーの URL を変更する方法:http://cl.pocari.org/2007-04-08-1.html]])。[[Versions]]にはこの機能は存在しないのでコマンドラインを使うしかない。

**リポジトリ構成 [#p9b624f9]
-http://localhost:8080/repos/sample/trunk、branches、tagsと構成する例が多い。
-しかし実際は、sample/trunk/sample、のようにtrunkの下にプロジェクト名のフォルダを作ったほうがチェックアウト時にめんどくさくない。
-ブランチの場合は、branches/rel_1_2/sampleのように、途中のフォルダ名でブランチを区別する。


* Tips [#md08208c]

** .svnを削除(Windows) [#j91fd95b]
- [[[Subversion] .svnファイルを一括削除する:http://blog.non-style.com/2009/03/subversion-svn.html]]より、Windowsの場合、次の内容のバッチファイルを作っておき実行するのが簡単(削除したいフォルダで実行する)。
 for /R %i in (.svn) do rd /Q /S "%i"

**.svnを削除(Mac) [#l3e8c62d]
-[[- profaim.jp:http://www.profaim.jp/tools/soft/svn/svnother/mac/del_svninfo.php]]より。
 find . -name ".svn" -type d -exec echo delete {} ";" -exec rm -rf {} ";"
**vendor dropの管理 [#j6f49995]
*** 参考情報 [#g3316619]
-[[ベンダブランチの管理方法:http://d.hatena.ne.jp/miau/20090906/1252246537]]

***概要 [#y8c5be32]
-サードパーティのライブラリを自分のリポジトリで管理したい場合どうすればいいのか?
-サードパーティのライブラリ自体に手をいれたりする場合自分のリポジトリで管理したいが、上流でバージョンアップしたときはその変更をとりこみたい。

***方法1: svn_load_dirs.plでまじめに追随 [#s3726a22]
-svn_load_dirs.plというスクリプトを使って、追加・削除・リネームされたファイルを教えてやるというもの。
-作業が簡単になるとはいえ、いちいちファイルがどうなったか指定しないといけないので変化がはげしい場合激しくめんどう。
-巨大ライブラリなどでは現実的ではない。

***方法2: バージョンごとにimportする [#m59aa6ff]
-リポジトリがぐんぐん増えていくが簡単。
-差分がわからないので、自分がライブラリに手を加えていた場合使えない。
-と思っていたら[[An opinion on...: Subversion Vendor Branches Howto:http://lookfirst.com/2007/11/subversion-vendor-branches-howto.html]]のようにやればよいのかな。
***実例1: boostを管理 [#d0968f67]
-boost自体に手をいれていない場合、バージョンごとにimportするのが現実的な気がする。
-svn_load_dirs.plなんてファイルが多すぎてきっといやになる。
-リポジトリで管理すべきものかどうか考えたほうがいいかも。

**CVSから移行する [#d87b72ac]

***概要 [#i6341eb0]
-[[CVSからSVNへ移行する - Zend私的メモ:http://d.hatena.ne.jp/tach1/20101006/1286348446]] / [[Zend私的メモ:http://d.hatena.ne.jp/tach1/]]にあるように、cvs2svnを利用する。
-TracLightning付属のPython / svn環境を利用。
-cvsntだったが一応成功した模様。

***手順 [#s7bad326]
-http://cvs2svn.tigris.org/svn/cvs2svn/trunkから最新版svnを取得(ユーザーはguest)。
-cvs2svnを実行。コマンドオプションは[[cvs2svn: cvs2svn Documentation:http://cvs2svn.tigris.org/cvs2svn.html]]を参考にしたほうがよい。
#pre{{
% python cvs2svn --encoding=cp932 -s d:\temp\svnrepo d:\temp\cvsrepo

}}


**リポジトリから不要ファイルを削除する [#pcafedfe]
-まずリポジトリをdumpしておく
 # svnadmin dump <リポジトリパス> > dump20120206
-dump20120206ファイルを見て、Node-pathを確認し、削除するファイルのパスを調べる。特に頭にスラッシュがつくかどうかが重要らしい。
 # svndumpfilter exclude '削除するパス' < dump20120206 > dump20120206_filter
-うまくいくと Dropped…というメッセージが表示されるはず。
-新しいリポジトリを作成しロードしなおす(古いリポジトリを使う場合リネームしておく)。
#pre{{
# svnadmin create <新規リポジトリ>
# svnadmin load <新規リポジトリ> < dump20120206_filter
}}

**Excelファイルを管理する [#e8aa49e2]
-xlsファイルなどファイルを開いただけでタイムスタンプが変更されてしまうので不便。[[Word2010「ファイルを保存するときにファイルのプロパティから個人情報を削除する」がグレーアウトされている場合の対処法 −教えて!HELPDESK:http://office-qa.com/Word/wd381.htm]]。
-Excel2007の場合、[Excelのオプション > セキュリティセンター > プライババシーオプション]で、ドキュメント検査を行い、プライバシー情報を削除してから、「ファイルを保存するときにファイルのプロパティから個人情報を削除する」にチェックを入れる(開き直さないとグレーアウトされてだめかも)。
*トラブルシューティング [#udb0d33a]
**ログファイルを変更できない [#m6683732]
-リポジトリのhooksディレクトリにpre-revprop-changeというシェルスクリプトを置かないといけない。実行権限も必要(Windowsの場合はpre-revprop-change.batというバッチファイル)。
-pre-revprop-change.tmplをコピーして作る。
#pre{{
REPOS="$1"
REV="$2"
USER="$3"
PROPNAME="$4"
ACTION="$5"

if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo "Changing revision properties other than svn:log is prohibited" >&2
exit 1
}}
-ログを編集するユーザーを限定したり、変更できるプロパティを限定したりするためにこのスクリプトをhookしている模様。

** フォルダを作成しようとすると"405 Method Not Allowd"と表示される。 [#xa6811b3]
-フォルダを作成しようとすると次のエラーメッセージが表示される。
 サーバーが、リクエストへのレスポンスとして予想外の戻り値(405 Method Not Allowd)を送信してきました(リクエスト: MKCOL,
-作成しようとしているフォルダがすでにリポジトリに存在していないか、または日本語フォルダ名など使用できない文字を含んだフォルダを作成しようとしていないか確認する。

**巨大リポジトリをチェックアウトしようとすると途中で止まる。 [#ve3edafe]
-Apacheと連携して使っている場合のはなし。
-[[[Subversion-users] Checkout fails on large repository - Grokbase:http://grokbase.com/t/subversion/users/118g4h9h2a/checkout-fails-on-large-repository]]にあるように、KeepAliveTimeoutの値を増やせば良い。

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS