#author("2021-12-14T02:33:05+00:00","","")
// 下階層用テンプレート
#topicpath
----
//ここにコンテンツを記述します。
#contents


**HTTPの代わりに、SSHを使う [#w1918e31]
SubversionはApacheなどWEBサーバを用いてHTTPでアクセスする方法のほかに、SSHを用いてアクセスすることもできます。すでにSubversionが稼働しているサーバにはSSHログインが可能な環境だとして、アクセスするURLを
 svn+ssh://[アカウント名]@[サーバ名]/opt/svnroot/fugafuga/
とすればOKのようですね。んーでもアクセス制御とかはようわからんなあ。また、
-HTTPS+Digest認証によるアクセス
-SSHを用いたアクセス

どちらがよりセキュアなんですかね??


**匿名ユーザならチェックアウトのみ、匿名でなく(たとえばDigest認証済みのユーザとか)かつSSLならコミットOKっていう設定。 [#v6545e93]

[[きのの、まずはやってみる>http://d.hatena.ne.jp/masatomix/20090428/1240937365]]



**複数のリポジトリを公開したい [#q672784a]
サーバ上に
 /opt/svnroot1
 /opt/svnroot2
というSVNのリポジトリ((つまりたとえば svnadmin create /opt/svnroot1 とかしたってこと))があるとします。

 <Location "/svn">
   DAV svn
   SVNParentPath /opt
 </Location>
とhttpd.confに書いておくことで、
 http://[サーバ名]/svn/svnroot1/
 http://[サーバ名]/svn/svnroot2/
というURLでそれぞれのリポジトリにアクセス可能です。



**ディレクトリごとにアクセス制御する [#xcfc021e]
あるサーバ内で複数のリポジトリや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/      :読み書き不可
となります。


たとえば
-全てのユーザはtrunk,branches,tagsを読み可能
-admin1は何でもできる
-dev1はtrunk,branchesに書き込みも可能(tagsにはコミットできない)
-tester1,tester2はコミット不可能

などとしたい場合は以下のようにしておきます。
 [groups]
 admin = admin1
 developer = dev1
 tester = tester1,tester2
 
 
 #基本的に誰でも読みは可能
 #adminは読み書き可能
 [/]
 * = r
 @admin = rw
 
 #さらにdeveloperはtrunkを読み書き可能
 [/trunk]
 @developer = rw
 
 #さらにdeveloperはbranchesを読み書き可能
 [/branches]
 @developer = rw

-[[ディレクトリごとのアクセス制御>http://discypus.jp/svnbook/svnbook_ja_html/ch06s04.html#svn.serverconfig.httpd.authz.perdir]]

**subversionの".svn"を削除するワンライナー [#ad7e66e0]
[[uthorofotus iruc>http://flyfront.blog.shinobi.jp/Entry/6/]]というサイトに載ってました。
 $ rm -rf `find ./ -type d -name .svn ! -regex \.svn/. -print`
なるほどー。


**Eclipseでブランチを作る [#t77ce514]
SVN管理しているEclipseプロジェクト上で「チーム >> ブランチ」を選択します。
#ref(eclipse.gif)

ブランチが作成されました。

#ref(viewvc.gif)

確かに作成されていますね。


**ブランチからマージする。 [#w72dd1d9]
Branchでいくらか開発が進捗して、その差分をTrunkにマージする方法です。考え方としては
-ブランチが作られた(枝分かれした)時点から直近まで、のブランチの変更内容を抽出し
-Trunkのワーキングコピーにその差分を反映
-Trunkにコミット
となります。

まずはTrunkをcheckoutしてきたEclipseプロジェクトで「チーム >> マージ」を選択します。
表示されるダイアログで、URLをブランチのURL、Start Revisionを枝わかれしたときのリビジョン、Stop RevisionをHeadにします。

#ref(merge.gif)



これでブランチを作成したときから今までのブランチの変更が、トランクのワーキングコピーに反映されました。後はコミットすればOKです。

**キーワード置換 [#t9f022eb]
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では
#ref(pref.png)

#ref(keyword.png)
複数キーワードを指定する場合。

で設定できます。

***一度に設定を追加するワンライナー [#u2db3985]
 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はキーワード部分の違いを無視してくれている? [#d6996495]
SubversiveでクライアントをNative JavaHLで使ってるのですが、同期化をしたときに$Id$などの違いを無視してくれるようです。CVSではここが差分として出てしまうっていう問題があったのですが、$Id$内が異なってても差分として出てこないみたいです。

これはいいなー。。


**コマンドの覚書 [#le295af0]
***初回のチェックアウト [#h9580f5f]
 svn co http://hogehoge/trunk
とか
 svn co http://hogehoge/trunk/project名
とか。

***ファイルの追加 [#wed0f752]
 svn add *
 svn commit

ちなみに svn add * はすでにバージョン管理下にあるディレクトリをとばしてしまうそうなので、ワーキングコピー内の全てのファイルをaddしたい場合は
 svn add * --force
という--forceオプションを付ければOKです。

-[[svn add>http://subversion.bluegate.org/doc/re01.html]]


***ファイルの更新 [#m63297ee]
 svn update

cvsでいうcvs -q -n((確認だけ。更新しない)) はどうすんのかな??

***ワーキングコピーへの修正の確認 [#x66903d8]
 svn status
これでローカルで変更した内容が出力されます。ネットにはアクせずしないみたいです。よってもちろん他人の変更は表示されません。

***修正内容の確認 [#y462a3a0]
 svn diff

***ファイルの削除 [#vda6b889]
 svn delete classes
 svn commit


**関連リンク [#h5cb69ca]
-[[ソフト/Subversion/メモ - discypus>http://discypus.jp/wiki/?%A5%BD%A5%D5%A5%C8%2FSubversion%2F%A5%E1%A5%E2]]



----
この記事は
#vote(おもしろかった[35],そうでもない[5])
#vote(おもしろかった[36],そうでもない[5])
-  SVNParentPath /opt としないで SVNPath /opt/svnrootなどとしてる場合も動きます。もちろん。 -- [[きの]] &new{2007-06-11 (月) 01:54:26};
- svn diffしてて思ったんだけど、Subversionはキーワードを置換しないでリポジトリに保管されてるみたいですね。CVSだと置換してたけど。 -- [[きの]] &new{2007-07-22 (日) 12:32:58};
- あれ、、タグ付けって、、、SVNリポジトリでやるんだっけ???プロジェクトからできないっけ? -- [[きの]] &new{2008-01-19 (土) 08:47:14};
- ブランチの状態をタグ付けするときって、Branchのタグ(Branch_V1.0_hogehogeみたいな)を選択して、タグ付け、だっけ? -- [[きの]] &new{2008-01-19 (土) 08:49:11};

#comment
#topicpath


SIZE(10){現在のアクセス:&counter;}

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