# 5. Clients and GitHub vs Unity Version Control **Target:** Unity 6000.5+. Part of [[Version Control]]. ## Git clients compared You can mix clients on one repo — they all speak Git. Pick defaults for the team, keep CLI available for LFS locks and `mergetool`. ### GitHub Desktop **Best for:** visual commit/push, onboarding, Marshall’s existing quickstarts. - Download: https://desktop.github.com/ - Strengths: clear diff list, publish/clone flows, LFS-aware clone/push for GitHub remotes. - Weaknesses: limited advanced merge-tool control vs raw Git; rebases/conflict strategies are simpler; hard scene merges still want CLI + UnityYAMLMerge. Walkthroughs already in the vault: - [[Setting Up GitHub for Unity]] - [[Connecting an Existing Unity Project to a New GitHub Repository Using GitHub Desktop]] ### Git CLI **Best for:** precise staging (`git add -p`), rebase, LFS lock/unlock, `git mergetool`, history surgery, CI scripts. ```bash git status git diff --stat git add Assets/Prefabs/Player.prefab Assets/Prefabs/Player.prefab.meta git commit -m "Player: expose footstep SO reference" git lfs locks git mergetool --tool=unityyamlmerge -- Assets/Scenes/Level_01.unity ``` Install Git for Windows: https://git-scm.com/downloads LFS: https://git-lfs.com/ ### IDE / Editor integrations | Integration | Fit | |---|---| | **JetBrains Rider** Git toolwindows | Excellent for code reviews, partial commits, annotate; still use CLI for UnityYAMLMerge | | **Visual Studio** Git | Fine for code; watch that generated `.csproj` / `.sln` stay gitignored ([[1. Serialization Meta and Gitignore]]) | | **VS Code / Cursor** Git & GitLens-style UIs | Convenient staging; configure mergetool externally for `.unity` | | **Unity Editor Version Control package / UVCS plugin** | Different stack — see UVCS below, not “Git inside Unity” by default | **Rule:** code conflicts → IDE merge UI is fine. **Scene/Prefab conflicts → UnityYAMLMerge** ([[3. UnityYAMLMerge Smart Merge]]). ### Other GUIs Unity documents SourceTree and TortoiseGit mergetool wiring on the Smart merge pages. Use them if the team already standardized; otherwise Desktop + CLI covers most Unity class / indie setups. --- ## Git + GitHub vs Unity Version Control (UVCS) **Unity Version Control** is the current name for what was **Plastic SCM**. Official hub: https://docs.unity.com/en-us/unity-version-control ### Side-by-side | Concern | Git + GitHub (+ LFS) | Unity Version Control | |---|---|---| | **Mental model** | Distributed snapshots, branches, PRs | Centralized and/or distributed; strong checkout/lock story | | **Large binaries** | Git LFS (quotas, pointers, migrate pain) | First-class large file / binary workflows | | **Exclusive edit** | LFS locks (optional, social) | **Smart Locks** / exclusive checkout ([docs](https://docs.unity.com/en-us/unity-version-control/smart-locks)) | | **Artist UX** | Desktop/CLI can feel code-centric | **Gluon** workflow aimed at artists (subset download, lock, submit) | | **Scene merge** | UnityYAMLMerge via Git mergetool | Configure UnityYAMLMerge in UVCS client merge tools ([Smart merge](https://docs.unity.com/en-us/engine/7000.0/manual/get-started/project-configuration/version-control/smart-merge)) | | **Ecosystem** | GitHub Actions, huge tool landscape, student familiarity | Unity Dashboard users/roles, UVCS code review, Unity ecosystem focus | | **Cost / hosting** | GitHub plans + LFS bandwidth/storage | Unity / UVCS licensing & cloud orgs (check current Unity terms) | | **Interop** | Native Git everywhere | UVCS can interact with Git in some migration/sync scenarios ([Migrating from Git](https://docs.unity.com/en-us/unity-version-control/migrating-from-git)) — evaluate carefully; not a free “both at once” workflow | ### When Git + GitHub fits (typical for this vault’s Pipelines track) - Solo developer, class projects, small engineering-heavy teams. - You already teach/use GitHub PRs and Actions (CI is a **future** Pipelines topic — not linked yet). - Text-first project (code, YAML scenes, modest binary footprint) with disciplined Prefab isolation. - You want maximum portability (clone anywhere Git exists). ### When UVCS fits - Heavy **binary** production (cinematics, huge FBX/PSD churn) where LFS quotas or lock UX become the bottleneck. - Mixed **artist + engineer** teams that benefit from Gluon + Smart Locks. - Org already standardized on Unity Dashboard / UVCS cloud. - You want exclusive checkout as a **default** safety property for non-mergeable assets. ### Hybrid honesty Some studios keep code-ish workflows in Git and art in another system — that split has coordination cost (two sources of truth). Prefer **one** primary VCS for a given project unless you have dedicated DevOps. UVCS↔Git bridges exist for migration; treat them as projects, not casual toggles. ### Editor Mode reminder - **Visible Meta Files** — Git (and most external VCS). - **Unity Version Control** / **Perforce** — Editor integrates with that system’s checkout semantics; Smart Merge UI options differ ([Version control](https://docs.unity3d.com/6000.5/Documentation/Manual/VersionControl.html)). --- ## Practical recommendation (Marshall / teaching context) 1. **Default student & personal pipelines:** Git + GitHub, Desktop for daily, CLI for LFS + mergetool. 2. Document Force Text + Visible Meta + Unity `.gitignore` on day one ([[1. Serialization Meta and Gitignore]]). 3. Add LFS when binaries approach GitHub’s warning/block thresholds ([[2. Git LFS]]). 4. Mention UVCS in class as the Unity-native alternative when teams hit binary/lock walls — point at official UVCS docs rather than hand-waving Plastic nostalgia. ## Next [[6. Pitfalls]] — the failure modes that waste days. ## See also (hands-on UVCS) - [[UVCS]] — step-by-step UVCS lab set under `Version Control/UVCS/`