> For the complete documentation index, see [llms.txt](https://docs.coherence.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coherence.io/2.4/manual/advanced-topics/team-workflows/version-control-integration.md).

# Version control best practices

If you're using a VCS (which we highly recommend you to) like git, Subversion or PlasticSCM, here's a few tips.

* Follow [general-purpose ignore rules for Unity](https://docs.unity.com/en-us/unity-version-control/ignore-files).
* Might version `Assets/coherence/baked`.
  * If versioned:
    * Pros: ready-to-build project.
    * Cons: noise, as baked scripts change constantly. Noise can be reduced if your VCS of choice allows to skip diffs from these files. E.g., see [git-specific best practices](#git-specific-best-practices) below.
  * If not versioned:
    * Pros: no noise.
    * Cons: everyone (incl. CI environment) must bake before the project is usable.
* **Must** version `Assets/coherence/baked_stubs` when using [command extensions](/2.4/manual/networking-state-changes/commands.md). This folder contains safe fallbacks. If this folder is not versioned, you might face compilation error deadlocks that can only be solved by commenting out any usage of command extensions in your code.
* **Must** version `Assets/coherence/Gathered.schema`. **Treat it as a binary**. Resolving changes based on diffs can completely break the schema — the schema is to be thought as an atomic unit.

## Git-specific best practices

* Use a general-purpose `.gitignore` for Unity, like [this one](https://github.com/github/gitignore/blob/main/Unity.gitignore).
  * As a rule of thumb, do not version anything that Unity regenerates per-user, like `Library`, `Temp`, `UserSettings` or `.csproj` files.
* Treat `Gathered.schema` as binary via `.gitattributes` (see below).
* Optionally, ignore diffs from `Assets/coherence/baked` and `Assets/coherence/baked_stubs` via `.gitattributes` (see below) to reduce unnecessary noise.

<details>

<summary><code>.gitattributes</code> example in your git repo root.</summary>

```
Assets/coherence/Gathered.schema -merge -text
Assets/coherence/baked -diff
Assets/coherence/baked_stubs -diff
```

</details>
