S eda1a14b50ee24bcab19b62f40858e76 Subversion

そろそろ整理したいな...

subversion
【名】
破壊、転覆
・The planting of a bomb in the office was an act of subversion.
事務所に爆弾をしかけたのは、破壊行為だった。
http://eow.alc.co.jp/subversion/

クソCVSなんてSubversionしてやるぜ!ってことか
うっかり、海外で口走れないなw

推奨されるリポジトリ構成

・trunk : ここに本流を入れる
・branches
・tags

CVSはブランチをやるとわけわからんようになるらしくてあまり使わない方がいいと言われている。Subversionではブランチ・タグは単純なファイルコピーでシンプルなのでバンバンやってよろしいらしい。

http://subversion.bluegate.org/doc/

CVSユーザのためのSubversion


http://subversion.bluegate.org/doc/apa.html
http://e.tir.jp/wiliki?subversion

削除されたファイルを復活する

Subclipseではできないっぽい?

http://subversion.bluegate.org/doc/ch04s04...#svn.branchmerge.commonuses.resurrect

svn copy --revision 807 \
http://svn.example.com/repos/calc/trunk/re... ./real.c

1.4と1.5ではフォーマットが異なる

svn: このクライアントは、作業コピー '.' を扱うには古すぎます。もっと新しい Subversion クライアントをダウンロードしてください。

なんと一度1.5のクライアントを使うと1.4に戻せないみたい!!

SubversiveでクライアントSVNKITをdevelopmentにして、戻すと何故か起動直後に落ちるようになった。どうやらsvnのバージョンが原因みたい

ブランチをトランクにマージする方法

・リビジョンを指定する。ブランチした時のリビジョンと適用したいリビジョンを指定
・--dry-runするとマージ結果だけを教えてくれる
svn merge --dry-run -r 343:344 http://svn.example.com/repos/calc/trunk

このコマンドは作業コピーに/repos/calc/trunkの「343-344における変更点」だけを取り入れる。変更点の範囲を指定しないと、どこからどこまでなのかがわからない(URLだけ指定できないのはこのため)

.svnを削除する

Windows
% for /R /D %I in (.svn) do RMDIR "%I" /S /Q
http://dev-e.sakura.ne.jp/wiki/wiki.cgi?pa...
「*.svn」ではだめだったけど「.svn」ならいけた

Linux
% find /path/to/dir -type d -name '.svn' | xargs rm -rvf
http://kjirou.sakura.ne.jp/mt/2008/01/dirs...

% rm -rf `find ./ -type d -name .svn ! -regex \.svn/. -print`
http://blog.triangle.jp/2007/11/svn.html

たぶんxargs使う方がいい?

ってかsvn exportなんてあるんだ!.svnファイルを生成せずにファイルだけ得られるみたいだ。

おまけ。そのフォルダ内の全ファイルを削除する svn コマンド
% svn status | awk '{print $2}' | xargs svn del
http://bitmap.dyndns.org/blog/archives/001...

別のリポジトリを同時に使いたい

root
 |
 |-config
 |
 |-application
 |
 |-library----vendor1 (別のリポジトリ)
      |
      --------vendor2(別のリポジトリ)

libraryにsvn:ignoreつけるだけでOK。libraryに直接別のリポジトリを置いても大丈夫かもね。
別リポジトリのupdate/commitが面倒だけど、同じものが複数のリポジトリにまたがるよりかはマシ。ってかそもそもリポジトリ設計が…(ry

外部定義

こういう別のレポジトリを配置する場合のやり方が標準で備わってました!!

上記の方法だとupdateが面倒。外部定義という方法を使えば、updateとstatusが別のリポジトリも同時にできる(commitは同時にはできないみたい)

やり方はプロパティ「svn:externals」に
「{directory_path} {repository_url}」を設定するだけ。

例えば、こういうリポジトリ構造の場合。
root
 |
 |--- application
 |
 |--- vendor
        |
        |---------- hoge
        |
        |---------- moge

hogeは http://repos/hoge、mogeはhttp://repos/mogeを使いたいという場合は
% svn propedit svn:externals vendor
これを実行するとエディタが起動するので以下を設定
hoge http://repos/hoge
moge http://repos/moge

マニュアルみるとディレクトリの指定は相対パスなのでvendorじゃなくてもrootでもいいみたい。また、バージョンも指定できるらしい

参考
http://www.mazn.net/blog/2008/07/07/98.html
マニュアル
http://subversion.bluegate.org/doc/ch07s05...

リビジョン番号や更新者や日付をファイル内に自動で埋め込みたい

svn:keywords使ってファイルごとに使うキーワードを設定する。

でも、そんなこと普通はやってられないので自動プロパティ設定する。
クライアントのconfigファイルの[auto-props]ディレクティブに設定。

例えばphpだったらこんな感じ。
[auto-props]
*.php        = svn:eol-style=native; svn:keywords=Id Rev Date; svn:mime-type=text/x-php
ここにいい見本があった
http://code.google.com/p/symfony-doc-ja/wi...

あとはファイル名に「$Id$」って書くだけ。
$Id$は「$Id: svntest.php 2462 2009-02-23 23:29:26Z akkun $」みたいなのに置き換わります。

svnプロパティで管理されるので、一度この属性がついたらどこでも有効になる。

WindowsでもCUIで使う

apache2.0
http://subversion.tigris.org/servlets/Proj...

apache2.2
http://subversion.tigris.org/servlets/Proj...

コミット時にメール送信

hooks/post-commitを変更するだけ。
スクリプトは自前で用意しないといけない。

これを使わせてもらった。
http://f29.aaa.livedoor.jp/~yamakan/index....

リポジトリの分割

http://blog.iwa-ya.net/2007/06/02/011048

結構簡単にできるね。ただ、今までの履歴に別のディレクトリからコピーとかしてると、それもimportしないといけないという…

ユーザごとにアクセス権限設定する(認可のオプション)

http://subversion.bluegate.org/doc/ch06s04...#svn.serverconfig.httpd.authz

結構簡単にできる。apacheにはこれ設定するだけ
AuthzSVNAccessFile /path/to/access/file

設定ファイルaccess fileにはこういうのを定義。グループも設定できる。
[calc:/branches/calc/bug-142]
harry = rw
sally = r


svn COPY 502 bad gateway over HTTPS


ssl で svn copy はmod_davの制限上できない
http://www.digilib.org/modules/bwiki/index...#zca25176

コミットしたのに認識されない謎の現象

あるディレクトリにファイル数1000overをコミット。
なぜかupdateとかinfoとかlogとかしてもそのディレクトリだけ反映されない。他のファイルはコミットしても反映される。
updateでなくcheckoutだったら更新できた。原因はわからん。

削除されたアイテムの復活

svn copy {url}@{revision} {path}

外部参照で相対パスにする

1.5から使える

1.4は DIR URL だったけど
1.5は URL DIR になる
http://www.asahi-net.or.jp/~iu9m-tcym/svnd...

コマンド逆引き

ある期間の差分を得る

r2499からheadまでの変更。
通常は中身まで見るけど、--summarizeオプションでファイル一覧のみだけ出力
svn diff -r2499:head --summarize target

マージ

実行するなら--dry-runをはずす
# r2499からheadまでのfromにした変更をtoにもいれる
svn merge --dry-run -r2499:head from to

改行文字形式が一貫していません (Inconsistent line ending style)

ファイル中に違う改行コードを使ってる。統一させればOK。



もしかして

    他の人の「Subversion」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ