subversionの最近のブログ記事

Subversion 1.5 以降では、Merge Tracking 機能により、マージが楽になった。
フィーチャーブランチの典型的なマージ手順をメモしておく。

※以下の例で使用している、作業コピーのリポジトリーのルートディレクトリーのURLを表すキャレット (^) 記法は、Subversion 1.6 以降で可能です。

ブランチ作成

$ cd <いずれかの作業コピーのパス> # キャレット記法を使うために作業コピーに移動。フルでURL指定するなら不要。
$ svn cp ^/trunk ^/branches/br1

ブランチとtrunkの差分表示

$ cd <いずれかの作業コピーのパス> # キャレット記法を使うために作業コピーに移動。フルでURL指定するなら不要。
$ svn diff ^/trunk ^/branches/br1

trunkの最新をブランチにマージ

branchでの作業期間中、これを定期的に行う。

$ cd <ブランチの作業コピーのパス>
$ svn up # 作業コピーを最新にしておく
$ svn st # 作業コピーがクリーンであることを確認しておく
$ svn merge ^/trunk # ブランチの作業コピーにtrunkの最新をマージ
$ svn commit

ブランチをtrunkにマージ

branchでの修正が完了したら、最後にbranchをtrunkにマージする。
--reintegrate オプションが必要。

$ cd <trunkの作業コピーのパス>
$ svn up # 作業コピーを最新にしておく
$ svn merge --reintegrate ^/branches/br1
$ svn commit

いったん --reintegrate でマージされたブランチはもう使えない。

いったん削除する必要がある。
$ svn delete ^/branches/br1
ブランチでの作業を再開したい場合は、一度削除してから、ブランチを再作成する。
$ svn cp ^/trunk ^/branches/br1

削除したブランチのログを見たい

ブランチを削除しても、全てのリビジョンは残っているので、レポジトリのルートURLやブランチのルートURLなどに対して svn log すればよい。

$ cd <いずれかの作業コピーのパス> # キャレット記法を使うために作業コピーに移動。フルでURL指定するなら不要。
$ svn log ^/
$ svn log ^/branches


Basic Merging

カテゴリー:

作業コピーにあるすべてのバージョン化されていないオブジェクトを再帰的に追加するには、

$ svn add * --force

とやる。

svn add * だと、既にバージョン管理下にあるディレクトリのまだバージョン管理下にないファイルが追加されないから、--force を付けているのだが、この場合、実行したディレクトリ直下のsvn:ignore属性に設定した無視ファイルや無視ディレクトリも追加されてしまう。また、既にバージョン管理下にあるファイルも追加しようとするので、警告が出て汚い。

無視ファイルや無視ディレクトリを除いて、Subversionのバージョン管理下にないファイルをまとめてaddしたり、バージョン管理下にあるのになくなった(物理的に削除された)ファイルをまとめてdelするには、svn status の出力をsedでフィルタしてsvn addやsvn del にリダイレクトする以下のようなaliasを設定するとよい。

~/.bashrc
alias svndel="svn st | grep '^!' | sed -e 's/\![ ]*/svn del /g' | sh"
alias svnadd="svn st | grep '^?' | sed -e 's/\?[ ]*/svn add /g' | sh"


svn に登録されていないファイルをまとめて svn add:Goodpic

svn addがめんどくさいので | firegoby

これは便利。

カテゴリー:

CentOSのyumにはbash-completionがないので、ソースからインストールした。

Bash-Completion
から、最新のソースをダウンロードしてインストール。

$ tar xjvf bash-completion-1.3.tar.bz2
$ cd bash-completion-1.3
$ ./configure
$ make
$ sudo make install
~/.bashrc
# bash_completion
BASH_COMPLETION=/usr/local/etc/bash_completion
BASH_COMPLETION_DIR=/usr/local/etc/bash_completion.d
BASH_COMPLETION_COMPAT_DIR=/usr/local/etc/bash_completion.d
if [ -f /usr/local/etc/bash_completion ]; then
    . /usr/local/etc/bash_completion
fi

Gitのbash_completionは、Gitのソースの/contrib/completion/git-completion.bash、
Subversionのbash_completionは、Subversionのソースの/tools/client-side/bash_completion
にあるので、/usr/local/etc/bash_completion.d/ にそれぞれgit、svnという名前で保存すればよい。

【Git】bashで補完機能を有効にする(bash-completion) | 雪の天秤

カテゴリー:

カテゴリー:

バージョン管理されているファイルに実行属性を付けたいときには

$ svn propset svn:executable ON somescript
property 'svn:executable' set on 'somescript'

カテゴリー:

クライアントのSubversion設定ファイル(~/.subversion/config、Windowsの場合はC:\Users\pistolfly\AppData\Roaming\Subversion\config)に、

[tunnels]
hoge=ssh -p 30000

のように記述しておくと、svn+sshの代わりに、svn+hogeを使える。

sshトンネルを使う場合のポート番号指定方法 - mir the developer

カテゴリー:

カテゴリー:

作業コピーの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

symfony Web PHP Framework サ Chapter 17 - Extending Symfony

steps to phantasien t(2006-11-04)

カテゴリー:

カテゴリー: