「Subversion」カテゴリーアーカイブ

svn diffに色を付ける

colordiffをインストールして、Subversionのdiff-cmdに設定する。

colordiffをインストール

Macなら、MacPortsにcolordiffがある。

$ sudo port install colordiff

DebianとUbuntuはパケージがあるらしいのでapt-getで。

その他のLinuxの場合は、http://www.colordiff.org/ からソースをダウンロードしてインストール。

Subversionに設定

~/.subversion/config

[helpers]
diff-cmd = colordiff

実行例

$ svn diff | less -R

Subversion1.5以降でのブランチとマージ

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、紛失ファイルをまとめてsvn del

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

$ svn add * --force

とやる。

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

結局、svnだけではいい方法はない。

無視ファイルや無視ディレクトリを除いて、Subversionのバージョン管理下にないファイルをまとめてaddしたり、バージョン管理下にあるのになくなった(物理的に削除された)ファイルをまとめてdelするには、svn status の出力をgrepでフィルタしてsedで置き換える以下のような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にbash-completionをインストール

CentOSのyumにはbash-completionがないので、ソースからインストールした。
Bash-Completion
から、最新のソースをダウンロードしてインストール。

$ tar xjvf bash-completion-2.0.tar.bz2
$ cd bash-completion-2.0
$ ./configure
$ make
$ sudo make install

~/.bashrc

# Use bash-completion, if available
[[ $PS1 && -f /usr/local/share/bash-completion/bash_completion ]] && \
    . /usr/local/share/bash-completion/bash_completion

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

Subversion で作業コピーの URL を変更する方法

作業コピーのURLを別のレポジトリに変更(再配置)

このコマンドは、作業コピーのリポジトリパスURLの先頭部分を一括して書き換える。レポジトリにはアクセスしない。

svn switch --relocate FROM TO [PATH...]

作業コピーのURLを同じレポジトリの別のディレクトリに変更(切り替え)

作業コピーを別のブランチに変換する。

svn switch URL [PATH]

cl.pocari.org - Subversion で作業コピーの URL を変更する方法