The problem
git update-index --assume-unchanged is one of those commands you
either don't know exists, or you know it too well because it has already bitten
you. There's no native UI to list which files are currently assumed, and flipping
the flag on the wrong file silently breaks git status.
Most devs I work with end up with shell aliases and a mental sticky note. I wanted this to be a visible, reversible, multi-select action inside the IDE where the files actually live.
What I built
- Assumed Files tool window — a dedicated panel on the left sidebar listing every assumed-unchanged file across every Git repo in the project, with file-name / path / repository columns.
- Context-menu integration on the Project view — right-click any file (or multi-selection) to assume/unassume.
- Bulk unassume from the tool window with table multi-select.
- Multi-repository support — correct behaviour in monorepos and projects with submodules.
- Double-click to open, Show Diff action, and smart success/error notifications.
Design decisions
- Tool window over modal dialogs. Assumed files are an ongoing project concern, not a one-shot decision — treat them like changelists.
- No silent state. Every assume/unassume action emits a notification so the behaviour is never invisible.
- Per-repo awareness. The plugin resolves each file to the correct Git root instead of assuming a single repository, so it works in monorepos with multiple VCS mappings.
- Platform-idiomatic. Built on the IntelliJ Platform's
Git4Ideabindings rather than shelling out, so it works consistently across IntelliJ IDEA, PyCharm, WebStorm, PhpStorm and friends.