subversionの最近のブログ記事
バージョン管理されているファイルに実行属性を付けたいときには
$ svn propset svn:executable ON somescript property 'svn:executable' set on 'somescript'
カテゴリー:
クライアントのSubversion設定ファイル($HOME/.subversion/config、Windows Vistaの場合はC:\Users\pistolfly\AppData\Roaming\Subversion\config)に、
[tunnels] hoge=ssh -p 30000
のように記述しておくと、svn+sshの代わりに、svn+hogeを使える。
カテゴリー:
作業コピーのURLを別のレポジトリに変更(再配置)
このコマンドは、作業コピーのリポジトリパスURLの先頭部分を一括して書き換える。レポジトリにはアクセスしない。switch --relocate FROM TO [PATH...]
作業コピーのURLを同じレポジトリの別のディレクトリに変更(切り替え)
switch URL [PATH]
cl.pocari.org - Subversion で作業コピーの URL を変更する方法
カテゴリー:
たとえば、バージョン管理されたmyprojectディレクトリの中の、pluginsディレクトリ内に、別のレポジトリpluginNameを定義する場合
> cd myproject > svn propedit svn:externals plugins pluginName http://svn.example.com/pluginName/trunk > svn up
カテゴリー:
subclipseインストールで
Buckminster - Subversion support (Incubation) (0.1.0.v20070626) requires plug-in "org.eclipse.buckminster.core
というエラーになる。
インストール時にエラーになっているオプション機能を外せばOK。
カテゴリー:
通常、コマンドsvn add *はすでにバージョン管理下にあるすべてのディレクトリを飛ばします。しかし作業コピーにあるすべてのバージョン化されていないオブジェクトを再帰的に追加したいこともあるでしょう。svn addに --forceオプションを渡すと既にバージョン化されているディレクトリにも再帰的に降りていきます:
$ svn add * --force A foo.c A somedir/bar.c A otherdir/docs/baz.doc …Subversion によるバージョン管理
バージョン化されていないディレクトリとファイルをすべてaddして、
紛失ファイルをdelete後にcommitする
$ svn add * --force $ svn commit svn: Commit failed (details follow): svn: Directory <path><file> is missing $ svn delete <file> D <file> $ svn commit
しかし、svn add * --force では、実行したディレクトリ直下のsvn:ignore属性に設定したファイルやディレクトリも追加されてしまう。
なので、とりあえず以下のようにいったんadd * --forceで追加した後、revertしている。
何かいい方法はないのだろうか?
$ svn add * --force A ignore.txt A ignoredir A ignoredir/ignore.txt $ svn revert --depth infinity ignore.txt ignoredir/ 'ignore.txt' を元に戻しました 'ignoredir' を元に戻しました $ svn commit
カテゴリー:
scplugin.tigris.org
Mac OS XのFinderからSubversionを使えるようになる。Mac版TortoiseSVN。
アンインストールは、
/Library/Contextual Menu Items/SCFinderPlugin.plugin
/Library/Receipts/SCPlugin.pkg
を削除して、ログアウトするか再起動する。
Subversionのインストールは別途必要。
scplugin: Installing SCPlugin
カテゴリー:
■サーバ側の設定
レポジトリのhooks/pre-revprop-change.tmplをpre-revprop-changeにコピーして、実行権限を与え、以下のように変更する。REPOS="$1" REV="$2" USER="$3" PROPNAME="$4" ACTION="$5" if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" -a "$USER" = "HOGEHOGE" ]; then exit 0; fi echo "Changing revision properties other than svn:log is prohibited" >&2 exit 1
上記の例では、ユーザHOGEHOGEだけがログの変更が出来るようになる。
■クライアント側でログを編集するには
svn propset --revprop -r 25 svn:log "Journaled about trip to New York."
上記例では、リビジョン25のログメッセージをを変更しています。
svn propset svn:log --revprop -r 10 -F r10_log.txt svn://repo
上記例では、svn://repoにあるリポジトリのリビジョン10のログメッセージを「r10_log.txt」に書かれている内容に変更します。
カテゴリー:
sc create svnserve binpath= "\"D:\Program Files\Subversion\bin\svnserve.exe\" --service -r D:\svn\repos" DisplayName= "svnserve" depend= Tcpip
カテゴリー:
たとえば、Ruby on Railsアプリケーションのプロジェクトのtmpディレクトリ以下の全サブディレクトリ内のファイルを無視するには、tmpディレクトリにsvn:ignore属性で*を再帰的に適用する。
サブディレクトリ自体も無視する場合は、親ディレクトリにsvn:ignore属性で*を設定すればよい。
たとえばsymfonyプロジェクトのcacheディレクトリのように、cacheディレクトリ下のディレクトリは、自動的に作成されるため、ディレクトリ自体をソース管理する必要がない場合など。
svn propedit svn:ignore cacheで、環境変数SVN_EDITORで設定したエディタが開くので、
*と入力して保存する。
カテゴリー:
(以下引用、一部変更してます)
一度アプリケーションをセットアップしてしまえば、ソースのバージョン管理を始めることが推奨されます。Subversionが推奨されますが、 symfonyは本来CVSをサポートしています。次のサンプルはSubversionで管理するためのコマンドを示しています。そしてサーバーに Subversionがインストールされており、プロジェクトのための新しいリポジトリが作成されることを前提としています。Windowsユーザーに とってTortoiseSVNというSubversionクライアントが推奨されます。ソースバージョン管理とコマンドのより多くの情報のために、 Subversionのドキュメントを参照してください。
下記の例は$SVNREP_DIRという変数が環境変数として定義されていることを想定しています。もし定義していないのであれば$SVNREP_DIRの場所をリポジトリの確かなロケーションに置き換える必要があるでしょう。
$ svnadmin create $SVNREP_DIR/myproject
そして、リポジトリの基本構造(レイアウト)となるtrunk,tags,branchesが次のかなり長いコマンドで作成されます。
$ svn mkdir -m "layout creation" \
file:///$SVNREPOS/myproject/trunk \
file:///$SVNREPOS/myproject/tags \
file:///$SVNREPOS/myproject/branches
これは最初のリビジョンになります。そして、キャッシュとログなどのテンポラリファイルを除いたプロジェクトのファイルをimportしなくてはなりません。
$ cd /home/steve/myproject
$ rm -rf cache/*
$ rm -rf log/*
$ svn import -m "initial import" . file:///$SVNREPOS/myproject/trunk
次のように入力することでコミットしたファイルをチェックすることができます。
$ svn ls file:///$SVNREPOS/myproject/trunk/
どうやらよさそうです。さて、SVNリポジトリは全てのプロジェクトファイルのリファレンスバージョン(履歴)を持っています。これは /home/stece/myprojectディレクトリはリポジトリを参照する必要があるということです。最初にmyprojectディレクトリをリ ネームすることによって-全てがうまく動くのであればすぐに消してよいのですが-新しいディレクトリにリポジトリからcheckoutしましょう。
$ cd /home/steve
$ mv myproject myproject.origin
$ svn co file:///$SVNREPOS/myproject/trunk myproject
$ ls myproject
そうです。これで/home/steve/myproject/にあるファイルを動作させることができ、リポジトリに対してcommitすることができます。今となっては使わないmyproject.originディレクトリ(元のオリジナルのディレクトリ)は消してきれいにすることを忘れないでください。
もうひとつセットアップするためにすることが残っています。リポジトリに対してワーキングディレクトリのcommitを行ったときに、キャッシュや ログディレクトリなどの望まないいくつかのファイルがコピーされるかもしれません。それで、プロジェクトのためにSVN用の無視するファイルリストを指定 する必要があります。cache/やlog/ディレクトリに再び完全にアクセスすることができるように設定する必要があります。そしてSVNはアクセス権 限を保持していません。
$ cd /home/steve/myproject
$ svn propedit svn:ignore .
$ chmod 777 cache
$ chmod 777 log
SVN設定のための標準テキストエディタは起動されるべきである。もし、何も起こらないのであれば、次のように入力することによって好みのエディタをsubversionが使うように指定します。
$ export SVN_EDITOR=
$ svn propedit svn:ignore .
次にコミットするときにSVNが無視すべきmyprojectのサブディレクトリを単に追加するだけです。
cache
log
保存し終了します。これで完了です。

