Five Files Every Multi-Repo Team Should Keep in Sync
A practical list of the files that cause the most pain when they diverge across repositories — and how to keep them consistent.
Start With What Matters Most
Not every file needs to be identical across all your repositories. But some files, when they drift, cause outsized problems — broken builds, security gaps, inconsistent developer experience, and failed audits.
Here are five files that are worth keeping in sync if you're managing multiple GitHub repositories.
1. .github/dependabot.yml
Why it drifts: Dependabot configs are typically set up when a repo is created and then forgotten. When your team decides to change the update schedule, add a new package ecosystem, or adjust ignore rules, it gets updated in whichever repos someone remembers at the time.
What breaks: Repos without up-to-date Dependabot configs silently fall behind on dependency updates. This is particularly dangerous for security patches — a vulnerable dependency can sit in a repo for weeks or months because Dependabot isn't configured to check for it.
What to sync: The entire dependabot.yml file, or at minimum the schedule, ecosystems, and security update settings. If different repos use different package managers, you might need a few variants, but the core settings should be consistent.
2. ESLint Configuration
Why it drifts: ESLint configs get tweaked constantly. A developer disables a rule to unblock a PR. Another developer adds a plugin for a new pattern. Over time, each repo accumulates its own set of exceptions and additions, and the "standard" configuration exists only in theory.
What breaks: Developers working across repos encounter different linting rules, which erodes trust in the tooling. PRs end up with noise — formatting changes mixed in with actual code changes — because configs disagree on style rules. New developers can't rely on the linter to guide them because the rules vary by repo.
What to sync: Your base ESLint config file (.eslintrc, eslint.config.js, or whatever format you use). If repos need repo-specific overrides, have them extend a shared base config and only sync the base.
3. LICENSE
Why it drifts: License files seem like a set-it-and-forget-it thing, but they drift in surprising ways. A repo gets created from a template with the wrong license. Someone copies a license file from another project and forgets to update the copyright year or entity name. An acquisition or rebranding changes the legal entity but nobody updates the license files across all repos.
What breaks: Inconsistent licensing creates legal ambiguity. For open source projects, contributors may not know what they're agreeing to. For private projects, incorrect license files can cause problems during due diligence for funding or acquisition. Compliance audits flag license inconsistencies as issues that need remediation.
What to sync: The entire LICENSE file. This is one case where every repo should have exactly the same content (assuming all repos are under the same license). Update it once, sync it everywhere.
4. CI Workflow (.github/workflows/)
Why it drifts: CI workflows are the most frequently modified shared files in most organizations. A performance optimization gets added to one repo's workflow. A new required check gets added to another. Someone pins an action version in one repo after a breaking change but doesn't update the others. GitHub Actions themselves evolve, and repos upgrade at different times.
What breaks: Inconsistent CI means inconsistent quality gates. One repo might run security scanning while another doesn't. Build caching might work in some repos but not others. Deployment steps might differ in subtle ways that cause environment-specific bugs. When CI breaks, debugging is harder because you can't assume the workflow is the same as in the repo you just fixed.
What to sync: Your core CI workflow file or files. If repos need customization (different test commands, different build steps), structure your workflows to call repo-specific scripts so the workflow file itself can be standardized. Alternatively, sync the parts that should be identical (security scanning, linting, deployment) and let repos own the parts that genuinely need to differ.
5. .editorconfig
Why it drifts: EditorConfig files are small and easy to overlook. They get created during repo setup (or not — many repos don't have one at all), and then nobody thinks about them again. When your team standardizes on tab width, line endings, or trailing whitespace handling, existing repos don't get updated.
What breaks: Without a consistent .editorconfig, developers with different editor settings produce files with inconsistent formatting. This shows up as noisy diffs — PRs that change every line because of whitespace or line ending differences. It's a small thing that wastes time in every code review.
What to sync: The entire .editorconfig file. It's typically small and should be identical everywhere. This is one of the easiest wins — a single file that prevents a whole category of annoying PR noise.
How to Actually Keep Them in Sync
Knowing which files to sync is the easy part. The hard part is doing it consistently across 10, 30, or 100 repos without it becoming a full-time job.
The practical approach:
- Pick a source repo: Designate one repository as the canonical source for shared config files. This can be a dedicated "standards" repo or an existing repo that's well-maintained.
- Start with one file: Don't try to sync everything at once. Pick the file that's causing the most pain (usually CI workflows or Dependabot config) and get that working first.
- Use PR-based sync: Distribute changes through pull requests so teams can review before merging. Direct pushes to shared config files skip review and cause surprises.
- Expand gradually: Once the first file is working smoothly, add the next one. Build confidence in the process before scaling it.
RepoFileSync automates this workflow — define sync rules, trigger a sync, and PRs are created in every target repo. But whatever tool you use, the principle is the same: define once, distribute through PRs, and maintain visibility into what's in sync and what's drifted.