ラベル Subversion の投稿を表示しています。 すべての投稿を表示
ラベル Subversion の投稿を表示しています。 すべての投稿を表示

2014年11月29日土曜日

TortoiseSVN を SSH で利用する

TortoiseSVN を http 経由で利用していると、必ず見も知らぬIPアドレスからリポジトリへアクセスしてくる。
そこで、SSH+秘密鍵での接続に切り替える。
接続には、ToroiseSVN に付属している TortoisePlink.exe を利用する。
TortoisePlink のパラメータは、以下のとおりである。
[Path to TortoisePlink]\TortoisePlink.exe -P [ポート番号] -ssh -l [ユーザ名] -i [秘密鍵] -pw [パスワード] 
これを TortoiseSVN の設定画面から、[ネットワーク]→[SSH] の SSH クライアント項目へ記述する。
なお、リポジトリのURLは、svn+ssh://[サーバ名]/[リポジトリへの絶対パス] となる。

2014年11月22日土曜日

(リビジョンを変更せずに)Subversionで過去のリビジョンを永久に削除する方法

前回の方法でリポジトリを作成した場合、リビジョン番号は削除前のリビジョン番号よりも小さな値になる。
このとき、作成済みの作業コピーが記録しているリビジョン番号と異なるため、作業コピーから再作成後のリポジトリへアクセスすることができない。

そこで、リポジトリに空リビジョンを作成し、リビジョン番号の辻褄を合わせる。
まず、リポジトリを再作成する前に、リビジョン 0 より空リビジョン用のダンプファイルを作成する。
sudo sh -c "svnadmin dump -r 0:0 repo > skip.dump"
次にダンプファイル内の以下の値を変更する。
特に日時は、作業コピー作成前の日時になるように変更する。
sudo vim skip.dump


SVN-fs-dump-format-version: 2

UUID: 9bdad3bf-5b2e-41d3-be84-38a2beedc9c1

Revision-number: 1           # 0 → 1
Prop-content-length: 56
Content-length: 56

K 8
svn:date
V 27
2014-11-07T16:52:13.885682Z  # 作業コピー作成前の日時
PROPS-END
前回と同様にリポジトリを再作成するが、ダンプファイルをリロードする際、上で作成した skip.dump を空リビジョンとしてリロードしたのち、バックアップダンプファイルをリロードする。
for (( i=0; i<4; i++)); do sudo svnadmin load repo < skip.dump; done
sudo svnadmin load repo < repo.dump
なお、TortoiseSVN を利用して作業コピーから再作成したリポジトリへアクセスする場合は、まずSVN更新すること。

2014年11月16日日曜日

Subversion で過去のリビジョンを永久に削除する方法

Subversion は、その特性上、ファイルの追加や削除を問わず、過去のリビジョンをすべて管理する。
したがって、そのリポジトリのサイズは減少することがない。

長い間リポジトリを運用すると、リビジョンの中に今後一切不要なものも生じてくる。
このようなリビジョンは永久に削除したい。

まず、リポジトリに残したいリビジョンをダンプによりバックアップする。
以下の例では、repo リポジトリから、リビジョン5以降をダンプファイルとして取得している。
そののち、該当のリポジトリをいったん削除したのち再度作成し、ダンプファイルをリロードすればよい。
sudo sh -c "svnadmin dump -r 5:HEAD repo > repo.dump"
sudo rm -rf repo
sudo svnadmin create repo
sudo svnadmin load repo < repo.dump
なお、Apache 経由で TortoiseSVN を利用している場合は、再構築したリポジトリディレクトリを apache ユーザ の所有にすることを忘れないように。
また、SELinux を起動している場合は、以下のコマンドを投入する必要がある。
sudo chcon -R -t httpd_sys_content_t (リポジトリへのフルパス)
sudo chcon -R -t httpd_sys_rw_content_t (リポジトリへのフルパス)