Posts Tagged: subversion

git svn 使い方メモ

  • クローン
    • git svn clone [URL]
  • 名前を変えてクローン
    • git svn clone [URL] [NAME]
  • リビジョンを指定してクローン
    • git svn clone -r [NUM1]:[NUM2] [URL]
  • Subversionリポジトリが標準構成(/trunk、/branches、/tags)のときそれぞれに対応させてクローン
    • git svn clone –stdlayout –prefix=[TOP_DIR]/ [URL]
  • Subversionリポジトリのtrunk、branchと対応させてクローン
    • git svn clone –trunk=[BRANCH_DIR] –prefix=[TOP_DIR]/ [URL]
  • 最新リビジョンまで取得
    • git svn fetch
  • そのブランチのリビジョンを確認
    • git svn find-rev [BRANCH_NAME]
  • コミットする
    • git svn dcommit

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

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

社内でも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の操作、他にも役立ちそうです。