Version control for CAD that mechanical engineers will actually use
Strydr Silverberg ·
Git is built for text. It diffs lines, merges branches, and resolves conflicts automatically. None of that works for a .SLDASM, which is an opaque binary that references dozens of other binaries by filename. So we stopped trying to bend Git around mechanical CAD and built something that fits how assemblies actually evolve.
The problem with branching
Our first attempt mirrored Git: parts, branches, and an auto-fork whenever two people edited from a stale copy. It was technically correct, and nobody wanted to use it. Mechanical engineers don't think in branches and merges. They think in parts, and in the current good version of each part. A branch implies you will eventually reconcile two histories, but two versions of a machined bracket never merge. One of them is simply the one you build. Forcing that decision through a conflict resolution screen added ceremony to a choice that takes an engineer about two seconds at the bench.
Per-file versioning instead
Every model is now a folder tree, and each part or assembly file carries its own version history in object storage. You bless one version per file, and the blessed set becomes the source of truth. Nothing needs reconciling. There's just the latest upload and whichever version you've marked as current.
Blessing is deliberately cheap to undo. If a revision turns out to be wrong, you bless the previous one and the source of truth moves back without rewriting any history. Every upload is kept, so nothing is ever lost, and the blessed pointer is the only thing that decides what an assembly pulls in.
How the zip pipeline actually works
SolidWorks links files by relative path, so an assembly that cannot find bracket.SLDPRT two folders over will open with broken references or silently swap in the wrong part. That one constraint shapes the entire pipeline.
When you upload a Pack-and-Go zip, we unzip it server-side and treat every file inside as an independent versioned object. Before storing anything, we hash each file with sha-256 and compare it against the current version. Identical files are skipped, so a full Pack-and-Go of a three hundred part assembly only writes the handful of parts that actually changed. Pack-and-Go always exports everything, even untouched parts, so without this check every save would balloon storage and bury the real diff in noise.
Download reverses the process. We pull each file's blessed version, lay them back into their original folder positions, and zip the result so the relative paths land exactly where SolidWorks expects them. A phony Parts & Assemblies folder hides the long Users/.../Desktop wrapper path in the UI, but we preserve that wrapper inside the download so references resolve just as they did on the machine that created the files.
Sensible defaults
Default fab/ and analysis/ folders ship with every model, for drawings, laser cuts, BOMs, and FEA results. Engineers get a home for the artifacts that orbit a design without being part of it, and those folders version the same way everything else does.
No branches. No merge conflicts. Upload, bless, download.