Subversionで指定したサブディレクトリだけワーキングコピーをとる

Pocket

(更新:”ハイフンハイフン”を”−−”で書いています。コピペの際は注意。)

社内でもGitが使われるようになってもうそろそろSubversionも卒業かと思われる今日この頃ですが、
今になってやっとリポジトリのルートディレクトリからバージョン管理下に置きながら指定したディレクトリ以下だけワーキングコピーをとってくる方法がわかった…。
↑日本語がかなりわかりにくいけど要するに…
/repository/src1/…
/src2/…
/src3/…

/src20/…
とかいう構成のリポジトリがあるとする。
src*/以下にもかなりの数のディレクトリやファイルがあり、repository全体をcheckoutしようとすると大変なことになってしまうという状況で、src1/とsrc2/だけワーキングコピーをとって来たいという場合がある。

でも
$ cd ~/src/repository/
$ svn checkout https://…/svn/repository/src1
$ svn checkout https://…/svn/repository/src2
とかすると
$ cd ~/src/repository/
$ svn up
Skipped ‘.’
…とか言われたりしてなにかと面倒なことになってしまう。
つまり、リポジトリと同じ構成でワーキングコピーを取りたいのにこの方法では実現できない。

って不満がずっとあったのに今までどうするのかわからなかった、苦笑

んで、今日になってやっとワーキングコピーには”Depth”というパラメータがあるのを知った。
これはsvn upしたときワーキングコピーをとる深さらしい。
$ svn up −−depth immediates
見たいな感じで使う。

指定できる変数は
exclude : ?
empty : そのディレクトリ以下は空にする=svn upしてもワーキングコピーをとらない
files : そのディレクトリにあるファイルだけワーキングコピーをとる?(試してないので間違ってたらごめんなさい。)
immediates : そのディレクトリから1階層分だけワーキングコピーをとる
infinity : そのディレクトリ以下すべてワーキングコピーをとる(デフォルト)
らしい。

すでにあるワーキングコピーにDepthを設定するには
$ svn up −−set-depth immediates
という感じで使う。

と、いうことで…
ワーキングコピーに
repository/src1/…
/src2/…
を実現したい場合は、

$ cd ~/src/
$ svn checkout −−depth immediates https://…/svn/repository
$ cd repository
(src*が出来てるけど中は空)
$ cd src1
$ svn up −−set-depth infinity
$ cd ../src2
$ svn up −−set-depth infinity

とやればいい。(他にも方法がある気がするけど。)
(正確にいうとsrc1、src2だけでなく他のsrc*もコピーしてるのだけれど中身はsrc1とsrc2のものだけなので軽いし問題ない。)

Depthの操作、他にも役立ちそうです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください