Top / Subversion / TIPS集
HTTPの代わりに、SSHを使う †SubversionはApacheなどWEBサーバを用いてHTTPでアクセスする方法のほかに、SSHを用いてアクセスすることもできます。すでにSubversionが稼働しているサーバにはSSHログインが可能な環境だとして、アクセスするURLを svn+ssh://[アカウント名]@[サーバ名]/opt/svnroot/fugafuga/ とすればOKのようですね。んーでもアクセス制御とかはようわからんなあ。また、
どちらがよりセキュアなんですかね?? 匿名ユーザならチェックアウトのみ、匿名でなく(たとえばDigest認証済みのユーザとか)かつSSLならコミットOKっていう設定。 †複数のリポジトリを公開したい †サーバ上に /opt/svnroot1 /opt/svnroot2 というSVNのリポジトリ*1があるとします。 <Location "/svn"> DAV svn SVNParentPath /opt </Location> とhttpd.confに書いておくことで、 http://[サーバ名]/svn/svnroot1/ http://[サーバ名]/svn/svnroot2/ というURLでそれぞれのリポジトリにアクセス可能です。 ディレクトリごとにアクセス制御する †あるサーバ内で複数のリポジトリやtrunk,branches,tagsなど複数のディレクトリをあつかっているときの、ディレクトリごとのアクセス制御方法です。 httpd.confで <Location "/svn"> DAV svn SVNParentPath /opt AuthzSVNAccessFile /opt/hogehoge/dav_svn.authz AuthName "Subversion repository" AuthType Basic Require valid-user AuthUserFile /opt/hogehoge/.htpasswd </Location> などと書いておき、dav_svn.authz で [groups] developer = dev1 [/trunk] @developer=r としておきます。 そうすると http://[サーバ名]/svn/svnroot/trunk/ :dev1で読み可能 http://[サーバ名]/svn/svnroot/branches/ :読み書き不可 http://[サーバ名]/svn/svnroot/tags/ :読み書き不可 となります。 [/trunk] はリポジトリ名指定もできます。 [svnroot1:/trunk] @developer=r などと書けば http://[サーバ名]/svn/svnroot1/trunk/ :dev1で読み可能 http://[サーバ名]/svn/svnroot1/branches/ :読み書き不可 http://[サーバ名]/svn/svnroot1/tags/ :読み書き不可 http://[サーバ名]/svn/svnroot2/trunk/ :読み書き不可 http://[サーバ名]/svn/svnroot2/branches/ :読み書き不可 http://[サーバ名]/svn/svnroot2/tags/ :読み書き不可 となります。 たとえば
などとしたい場合は以下のようにしておきます。 [groups] admin = admin1 developer = dev1 tester = tester1,tester2 #基本的に誰でも読みは可能 #adminは読み書き可能 [/] * = r @admin = rw #さらにdeveloperはtrunkを読み書き可能 [/trunk] @developer = rw #さらにdeveloperはbranchesを読み書き可能 [/branches] @developer = rw subversionの".svn"を削除するワンライナー †uthorofotus irucというサイトに載ってました。 $ rm -rf `find ./ -type d -name .svn ! -regex \.svn/. -print` なるほどー。 Eclipseでブランチを作る †SVN管理しているEclipseプロジェクト上で「チーム >> ブランチ」を選択します。 ブランチが作成されました。 確かに作成されていますね。 ブランチからマージする。 †Branchでいくらか開発が進捗して、その差分をTrunkにマージする方法です。考え方としては
まずはTrunkをcheckoutしてきたEclipseプロジェクトで「チーム >> マージ」を選択します。 表示されるダイアログで、URLをブランチのURL、Start Revisionを枝わかれしたときのリビジョン、Stop RevisionをHeadにします。 これでブランチを作成したときから今までのブランチの変更が、トランクのワーキングコピーに反映されました。後はコミットすればOKです。 キーワード置換 †CVSにもあるヤツ。ファイルごとに指定する方法は分かったんだけどデフォルト設定する方法がまだ不明。 とりあえずファイルごとに指定するには bash-3.2$ svn propset svn:keywords Id hoge.txt property 'svn:keywords' set on 'hoge.txt' bash-3.2$ svn proplist -v hoge.txt Properties on 'hoge.txt': svn:keywords : Id bash-3.2$ でコミットすればOK。Idは置換されるようになります。 http://hrgs.xrea.jp/2006/12/23/subversion_auto_props にあるのですが、svnは ~/.subversion/config でクライアント側の設定を行うようです。でこのファイルに enable-auto-props = yes *.java = svn:keywords=Id としておけば、新規作成時に自動的に上のコマンドが実行されます。ただ新規の時だけで、コミット時は適用されないようです。 Subversiveでは 複数キーワードを指定する場合。 で設定できます。 一度に設定を追加するワンライナー †svn propset svn:keywords Id `find ./ -name *.java` ちなみに複数セットする場合は svn propset svn:keywords "Id Revision" `find ./ -name *.java` ""で囲む必要があります。 ちゃんとセットされたかどうかは svn proplist -v `find ./ -name *.java` で確認できます。 http://ukai.jp/debuan/2002w/subversion.txt のサイトにもっとエレガントなワンライナーがありました。$Idがあるやつだけにセットする、ってやりかたです。 svn propset svn:keywords Id `find . \( -name .svn -prune \) -o -type f -print | xargs grep -l '\$Id:'` (実際は一行) ちなみに -printはフルパス表示、-o はor検索、-type f はタイプがファイルのモノ、-pruneは除外、です。 http://subversion.bluegate.org/doc/ch07s02.html#id3065660 EclipseのクライアントSubversiveはキーワード部分の違いを無視してくれている? †SubversiveでクライアントをNative JavaHLで使ってるのですが、同期化をしたときに$Id$などの違いを無視してくれるようです。CVSではここが差分として出てしまうっていう問題があったのですが、$Id$内が異なってても差分として出てこないみたいです。 これはいいなー。。 コマンドの覚書 †初回のチェックアウト †svn co http://hogehoge/trunk とか svn co http://hogehoge/trunk/project名 とか。 ファイルの追加 †svn add * svn commit ちなみに svn add * はすでにバージョン管理下にあるディレクトリをとばしてしまうそうなので、ワーキングコピー内の全てのファイルをaddしたい場合は svn add * --force という--forceオプションを付ければOKです。 ファイルの更新 †svn update cvsでいうcvs -q -n*2 はどうすんのかな?? ワーキングコピーへの修正の確認 †svn status これでローカルで変更した内容が出力されます。ネットにはアクせずしないみたいです。よってもちろん他人の変更は表示されません。 修正内容の確認 †svn diff ファイルの削除 †svn delete classes svn commit 関連リンク †この記事は
Top / Subversion / TIPS集
現在のアクセス:78595 |