> For the complete documentation index, see [llms.txt](https://yutakatay.gitbook.io/katapedia/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://yutakatay.gitbook.io/katapedia/doc/svn.md).

# SVN

## TortoiseSVN

### 使い方

1. まず、リポジトリを作る。適当な空フォルダで"Create Repository here"をクリック。
2. "Create folder structure"をクリックし、trunk,tags,branchを作成する。
3. 次に、チェックアウトする。適当な空のフォルダにて"SVN Checkout"を実行。
4. URL of repositoryに先ほど作ったリポジトリ（フォルダパスはWindows形式のままでいい模様。file://は必要。）、Checkout directoryにチェックアウトするフォルダを入れ、実行する。
5. リポジトリの中身が落ちてくる。

### Windows不要ファイルのignore設定

設定->General->Subversion->Global ignore pattern

`*.o **.lo *.la *.al .libs *.so *.so.[0-9]** *.a **.pyc *.pyo __pycache__ *.rej *~ #*# .#** .*.swp .DS_Store .project .metadata Thumbs.db *.tpl.php old bak`

## 文書管理をSVNで、Redmineで管理する方法

1. WindowsにTortoiseSVNをインストールする
2. リポジトリを作成する（このとき、日本語が入っているリポジトリではだめ）。リポジトリは共有できる場所におく（部内共有サーバ等）。
3. Redmineサーバから共有サーバをマウントする。

   `sudo mount -t cifs://uri  -o user=username,workgroup=WORKGROUP  /mnt/tmp`

マウントした後のディレクトリに日本語が入らないようマウントポイントを工夫すること

1. Redmineのリポジトリ設定からマウントしたポイントを参照するようにする

## フック

### パラメータ

フック時には以下のようなパラメータが入ってくる

```
/path/to/repository 3 2-2
```

$1にリポジトリ名

$2にリビジョン

$3にトランザクション名

更新ファイルの情報を取得したい場合

`svnlook changed -r $REV $REPOS`

を実行すると

```
A sample2.txt
A sample3.txt
A sample.txt
```

のような形式で格納されている

## Tips

### WindowsでSVNのcheckoutを自動化

```
Dim repos_dir, to_dir

'①コマンドライン引数の情報を保存
Set objParm = Wscript.Arguments

'②取得したコマンドライン引数が2つ未満のときはエラー
If objParm.Count < 2 Then
WScript.echo "コマンドライン引数が足りません"

'③取得したコマンドライン引数2つより多いときもエラー
ElseIf objParm.Count > 2 Then
WScript.echo "コマンドライン引数が多いです"

Else
'④取得したコマンドライン引数が2つのときはOKなので
'コマンドライン引数の内容を取得し表示する
repos_dir = objParm(0)
to_dir = objParm(1)
WScript.echo "コマンドライン引数1=" & repos_dir
WScript.echo "コマンドライン引数2=" & to_dir
End If


cmd = "svn info " & to_dir
Return = ExecCmd(cmd)

If Return = 1 Then
cmd = "svn checkout " & repos_dir & " " & to_dir
Return = SelectExecSvn(cmd)
Else
cmd = "svn update " & to_dir
Return = SelectExecSvn(cmd)
End If

MsgBox "svn " & Return & "!!"


Function SelectExecSvn(cmd)
Dim msg
Return = ExecCmd(cmd)
If Return = 0 Then
msg = "checkout success!!"
Else
msg = "checkout failed !!"
End If
SelectExecSvn = msg
End Function

Function ExecCmd(cmd)
Set WshShell = WScript.CreateObject("WScript.Shell")
ExecCmd = WshShell.Run(cmd, 0, true)
End Function
```

### astahをTortoiseSVN管理する

\[差分の高度な設定]ダイアログを開き、\[追加]

拡張子もしくはMIMEタイプ： .asta

外部プログラム： "%ASTAH\_HOME%astah-commandw\.exe" -diff %base %mine

## TroubleShooting

### Expected FS format between '1' and '6'; found format '7' とかでてチェックアウトできない

SVNのクライアントとサーバでバージョンが違うことが原因

バージョンをあげるか、サーバのバージョンを落とす

```
svnadmin dump :repo_name > aaa.dump
svnadmin load :new_repo_name < aaa.dump
```

### TortoiseSVNでアイコンが更新されない

1. 右クリックしてSettingsを選ぶ。
2. ウィンドウが開くので、Icon Overlaysを選び、Status cacheをNoneにする。ウィンドウを閉じる。
3. エクスプローラーの表示を更新すると、アイコンが更新されている。
4. もう一度Settingsを開き、Status cacheの設定を元に戻しておく。
5. エクスプローラーの表示を更新すると、アイコンの表示が直る。
