> ## Documentation Index
> Fetch the complete documentation index at: https://docs.diversion.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# リビジョン制限

> 一致するファイルの最新 N バージョンのみを保持し、古いバージョンを削除してストレージを節約します。

Diversion はすべてのファイルのすべてのバージョンを永久に保存します。頻繁に変化する大きなバイナリファイル — ゲームビルド、テクスチャ、オーディオ — の場合、これはすぐに膨大な量になります。毎週保存される 500 MB のテクスチャは、1 年で約 26 GB の履歴になります。

**リビジョン制限** は、パターンに一致するファイルの最新 N バージョンのみを保持するよう Diversion に指示します。古いバージョンはバックグラウンドで削除され、ストレージを解放します。

ファイルの **すべて** のバージョンを削除する [`obliterate`](/ja/advanced/obliterate) とは異なり、リビジョン制限はファイルと最新バージョンを残し、余分な古いバージョンだけを削除します。

<Note>リビジョン制限は **Studio** および **Enterprise** プランでご利用いただけます。</Note>

<Note>
  「バージョン」(リビジョンとも呼ばれます) は、ファイルの 1 つのコミット済み状態です。`--keep 3` は、一致する各ファイルの最新 3 つのコミット済みバージョンを Diversion が保持し、それより古いものを削除することを意味します。
</Note>

<Warning>
  削除処理は古いファイルバージョンを永続的に削除し、取り消すことはできません。プロンプトや確認なしに、コミットのたびに自動的に実行されます。信頼する前に `dv prune list` でリポジトリのルールを確認してください。
</Warning>

## 使用例

| ファイルタイプ                         | 典型的な保持数       |
| ------------------------------- | ------------- |
| コンパイル済みアセット (`.uasset`、`.pak`)  | ヘッドのみ (`1`)   |
| 大きなテクスチャ (`.psd`、`.tga`、`.exr`) | 最新の `3` ～ `5` |
| オーディオ / ビデオ (`.wav`、`.mp4`)     | 最新の `2` ～ `3` |
| ビルド出力ディレクトリ                     | ヘッドのみ (`1`)   |
| ソースコードと設定 (`.cpp`、`.h`、`.ini`)  | 制限なし          |

## 要件

* [**組織管理者**](/ja/basic/access-levels#組織レベルのアクセス) である必要があります。
* Git と同期しているリポジトリではリビジョン制限はサポートされていません。

## 仕組み

1. 管理者が 1 つ以上のルールを追加します。各ルールはパスパターンと保持数で構成されます ([`dv prune`](/ja/cmd-ref/prune) を参照)。
2. コミットのたびに、Diversion はそのコミットが変更したファイルをルールと照合し、保持数を超えるバージョンを削除します。
3. 削除処理はバックグラウンドで実行されます。コミットが遅くなることは **ありません**。コミットする人にはプロンプトも警告も表示されません。

削除処理はデザイン上サイレントです: 管理者 (または Perforce インポート) がポリシーを設定し、コミッターはそれをオーバーライドできません。リポジトリで何が削除されるかは `dv prune list` で確認してください。

### 保持数

* `--keep <N>` — 最新 `N` バージョンを保持します (`1` ～ `999`)。`--keep 1` はヘッドバージョンのみを保持します。
* `--keep all` — すべてのバージョンを保持します (削除しない)。より広い制限からパスを部分的に除外する (部分的に否定する) ために使います。[ルールの順序](#ルールの順序) を参照してください。

### ブランチセーフなカウント

「保持 N」は **リポジトリごと** ではなく **ブランチごと** にカウントされます:

* すべてのブランチのヘッドバージョンは常に保持されます。
* ファイルの格納バイトは、**どのブランチ** の保持バージョンでもそれを必要としなくなったときにのみ削除されます。

したがって、複数のブランチ間で共有されるバージョンは、それを必要とする最後のブランチが削除するまで残ります。迷った場合、Diversion はあるブランチがまだ必要としているバージョンを削除するよりも、バージョンを長く保持することを優先します。

### 決して削除されないもの

* **ドラフトとシェルフ。** コミットされていない作業とシェルフ変更は常に保持されます。
* **各ブランチのヘッド。** 各ブランチの最新バージョンは、`--keep 1` でも常に保持されます。

## Glob 構文

パターンは **リポジトリのルートに固定** されます。ワイルドカードをシェルが展開しないよう、必ずクォートしてください。これは [`obliterate`](/ja/advanced/obliterate#glob-構文) と同じパターン文法です。

| パターン                       | 一致対象                                             |
| -------------------------- | ------------------------------------------------ |
| `/....pak`                 | リポジトリ内のあらゆる場所にあるすべての `.pak` ファイル                 |
| `/Builds/....pak`          | `/Builds/` 配下のあらゆる場所にあるすべての `.pak` ファイル          |
| `/Assets/Textures/....exr` | `/Assets/Textures/` 配下のあらゆる場所にあるすべての `.exr` ファイル |
| `/Builds/...`              | `/Builds/` 配下のすべて                                |
| `/Assets/hero.psd`         | 特定の 1 ファイル                                       |

## ルールの順序

ルールは **順序付きリスト** です。複数のルールがパスに一致する場合、**最後に一致したルールが優先** されます。ルールを追加すると末尾に追加されるので、後のルールが前のルールをオーバーライドできます。

これを使うと、より広いパターンを制限しつつ、サブツリーの下ではすべてを保持できます:

```bash theme={null}
# Keep 1 version of every .pak file...
dv prune add "/....pak" --keep 1
# ...except release builds, which keep every version.
dv prune add "/Releases/....pak" --keep all
```

`dv prune list` はこの優先順序でルールを表示します。

## ルールの管理

[`dv prune`](/ja/cmd-ref/prune) を使ってルールの一覧表示、追加、編集、削除を行います:

```bash theme={null}
dv prune list                              # show all rules, in priority order
dv prune add "/....psd" --keep 5           # keep the latest 5 versions of every .psd
dv prune set <id> --keep 3                 # change a rule's keep count
dv prune remove <id>                       # delete a rule
```

ルールを追加すると **今後の** コミットに適用されます。新しい制限を超えて既に存在するバージョンは削除されません。それらは、後続のコミットが各ファイルに変更を加えるにつれて削除されます。

## Perforce から移行する

これは Perforce の `+S` / `+Sn` ファイルタイプ修飾子 (ファイルの最新 N リビジョンのみを保持する) に相当する Diversion の機能です。

[Perforce depot をインポート](/ja/coming_from_perforce#移行オプション) する際、既存の `+S` ルールを Diversion のリビジョン制限として持ち込むことで、移行を通じて保持ポリシーを引き継げます。インポートは、変換されたルールのレビューレポートを生成し、管理者が適用します。**Diversion チームに連絡** して Perforce インポートを実行してください。

<Note>
  Diversion は設計上、ブランチセーフなカウントを保証します。Perforce の `+S` のブランチ間での挙動はサーバーバージョンによって変化し一貫していません — Diversion は常にすべてのブランチのヘッドを保持し、別のブランチがまだ必要としているバージョンは決して削除しません。
</Note>

## 関連

* [`dv prune`](/ja/cmd-ref/prune) — ルール管理のための CLI リファレンス
* [Obliterate](/ja/advanced/obliterate) — ファイルの全バージョンを完全削除
* [ストレージ](/ja/concepts/storage) — Diversion がファイルバージョンをどのように格納・共有するか
* [Perforce から移行する](/ja/coming_from_perforce) — マイグレーションガイド
