Build1 distinct publisher3 min readPublished
A shared DTO change on a private package feed costs a library PR, a version bump, and one consumer PR per service. FilmTailor's answer was a single repo; the work was carrying git history across rather than copying files in.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Price one field added to a shared DTO under a private package feed. You open a PR against the shared library, bump the version, then open one PR per consuming service to pick the new version up [3]. The post describes five terminals and five slightly stale READMEs [2], so call it five services: six pull requests and a version bump to move one field [21]. The count is irritating rather than fatal. The drift is the defect, because there is always a service running a few versions behind the contract because nobody got round to bumping it [4]. Consolidation turns that dependency into an internal project reference, and skew has nowhere left to live [5].
The migration itself is a history-rewriting job, which is where the cost sits. FilmTailor used git-filter-repo, the tool the Git project now points people towards in place of filter-branch, which is slower and carries enough sharp edges that the docs discourage it [15]. On macOS that is a brew install [16]. Because the tool rewrites rather than edits, a typo is durable, so the post's own discipline is to work in a throwaway clone, never your working copy, and to keep the result off any shared branch until you are happy with it [17]. It also specifies a fresh clone of the service repo rather than your existing checkout, since that checkout is about to have its history rewritten [18]. The destination is a new repository initialised with a README and pushed [19]. The text supplied to me breaks off mid-sentence before the command sequence [22], so read the flags there, not here.
What copying files in destroys is specific: git blame, bisectability across the service's whole lifetime, and tags and releases [12]. The author concedes the shortcut is faster and that nobody is going to fire you for it [13], and says outright that if none of those three matter, copy the files and skip the exercise [14]. In my context the ranking is not equal. A bisect that cannot cross the move date can be worked around by keeping the old repo readable and switching to it for old regressions. Blame is the query you run weekly, and a blame wall dated the day of the move is the artefact you cannot reconstruct afterwards.
Whether the rest of the case transfers depends on your stack. Aspire, which Microsoft now calls just that, having dropped the .NET prefix [7], wants to orchestrate an entire solution from one AppHost [6], and multi-repo is not officially supported, with maintainer David Fowler placing it mid-term rather than short-term on the roadmap [8]. Teams bridge that with uber solutions that clone every repo into sibling folders, with git submodules, or by shipping the shared bits as NuGet packages [9]. Strip Aspire and the private feed out of the ledger and you are paying a rewrite plus a CI overhaul for editor ergonomics.
That CI overhaul is the line the whiteboard drawing leaves off. The promised follow-up covers tag-triggered selective builds so a change to one service does not kick off a full pipeline run for all of them [20], which tells you what the default looks like the morning after you merge: every push builds everything. That bill arrives immediately, while the preserved blame history pays out over years.
Ranked by verification strength, evidence, and original report placement.
The supplied text of the post breaks off mid-sentence after the destination-repo setup step, before the git-filter-repo command sequence is given.
At FilmTailor, every new service meant a new repo, a new pipeline, and recurring questions about which version of the shared library a given service was on.
The author describes the pre-migration state as five terminals open, five READMEs slightly out of date, and PRs that touched three repos because one API contract changed.
Running an internal NuGet feed means every change to shared code requires a PR to the shared library, a version bump, and a PR to consume the new version in each service.
Under the package-feed workflow, a service or two inevitably lags a few versions behind because nobody got round to bumping it.
A monorepo makes shared code an internal project reference instead of a package dependency, and the sync problem disappears.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Grok 4.6 lands in Copilot two days after launch, and the model picker becomes a procurement problem1 distinct publisher
build
GitVenom dressed hundreds of repositories over several years to ship AsyncRAT and Quasar1 distinct publisher
product
The AI-wrote-it claim died in eight hours. The Actions injection pattern did not.1 distinct publisher
build
Benchmarks are prototyping tools: how GitHub secret scanning ranked LLM configurations1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
One engineer's account, nobody's second look
The git half of this story is solid in an unusual way: the tag-collision warning and the deliberate removal of the origin remote are details you only write down after being bitten, and any reader can confirm them against git-filter-repo's own documentation. The Aspire half is thinner — the dropped prefix, the missing multi-repo support and David Fowler's mid-term framing all arrive as paraphrase, with the docs and the GitHub discussion gestured at rather than linked in the text we hold. And the walkthrough itself stops mid-word before the cleanup step, so even the method isn't fully on the record.
One team, self-reported, uncounted
FilmTailor's own merge is the only migration on the record here, and it comes without the numbers that would make it persuasive: no service count, no before/after on review time or build minutes, no note on how long the rewrite took. The wider signals are ambient rather than measured — git-filter-repo is described as where the Git project now sends people, and Aspire's rename implies a product shipping under Microsoft's care, but neither is quantified and both reach us through the same voice.
Honest pitch, unfinished delivery
The post talks itself down in exactly the place a hyped piece wouldn't: if blame, bisect and tags don't matter to you, copy the files in and skip all of this. That buys it a lot of credit. What's left over is a delivery gap rather than an overclaim — a headline about merging histories without losing your mind resolves into a walkthrough that cuts off mid-word, "the sync problem disappears" is asserted rather than demonstrated, and the monorepo's obvious cost, a full pipeline run for every one-service change, is acknowledged and then posted forward to a sequel we don't have.
Reputational, not commercial
Nobody is being paid in this story. The pressures are the ordinary ones of a practitioner writing up their own decision under their own byline: a sequel to trail, an employer's engineering practice to present well, and — charmingly literal — a section on rewriting commit author emails so the GitHub contribution squares follow you into the new repo. The one bias worth holding is that the author chose the monorepo and is now explaining why it was right, which is not the same as testing whether it was.
Trust the git, hold the Aspire
Read this as two documents of different reliability. The history surgery — tag collisions on duplicate v1.0.0 tags, the vanished origin remote, Git refusing a merge without --allow-unrelated-histories — is the kind of claim that survives contact with the manual, and you can lean on it. The Aspire roadmap position, the shape of Fowler's argument, and the unmeasured benefits of dropping the internal feed are one person's report, uncorroborated anywhere in our coverage, in a text that doesn't reach its own ending.