A Pragmatic Git-Workflow for Cross-Repository Collaboration
A Pragmatic Git-Workflow for Cross-Repository Collaboration
If you work across multiple repositories, teams, or even languages, a robust git workflow isn’t just nice to have-it’s essential. This guide walks you through a practical, scalable workflow that emphasizes clarity, safety, and collaboration. It covers branching strategies, binding changes across repos, automation hooks, PR hygiene, and a lightweight approach you can adapt to small teams or larger orgs.
Core goals of the workflow
- Clear separation of concerns between features, fixes, and experiments.
- Safe collaboration across multiple repositories without binary magic.
- Efficient review and integration with predictable release cadences.
- Lightweight automation to reduce repetitive mistakes. ### 1) Define a minimal, shared model
Before touching code, agree on a lightweight model that everyone follows:
- Repositories are independent but share a common baseline branch naming convention: main (or master) for stable, develop for integration, and feature/* for ongoing work.
- For cross-repo work, you use a Coordination Branch (coordinator/XXXX) or a Cross-Repo PR approach where a single feature set is represented as PRs in each repository.
- Every change has a clear owner, a short description, and a linked issue or epic.
Illustration: think of each repository as a device in a single system. You ship a coordinated firmware update across devices by aligning version numbers, tests, and release notes.
2) Branching strategy (lightweight and scalable)
- Mainline: main contains stable releases.
- Development: develop is the integration target for the next release.
- Feature branches: feature// branched from develop.
- Hotfix branches: hotfix/ branched from main and merged back to both main and develop.
- Cross-repo coordination branches: coordination/ maintained in each repository to tag related work; their histories should be able to be replayed or cherry-picked when needed.
Rules:
- Do not commit directly to main or develop; use feature or hotfix branches.
- Rebase with caution on public/shared branches. Prefer merge commits if history needs to reflect collaboration. ### 3) Cross-repo coordination pattern
When work spans multiple repos (A, B, and C):
- Create a single coordination issue/epic (e.g., EPIC-123).
- Each repo creates a corresponding feature branch for that epic: feature/EPIC-123-a, feature/EPIC-123-b, etc.
- Use a central “coordination PR” per repo that references the other repos’ PRs. This makes it easy to see the end-to-end change set.
- Pin versions or submodules where applicable to avoid drift.
Example structure:
- Repo A: feature/EPIC-123-core
- Repo B: feature/EPIC-123-service
- Repo C: feature/EPIC-123-infra
PRs link to the epic and include a shared changelog fragment that aggregates changes across repos.
4) Changelog and release notes across repos
- Each repo maintains a CHANGELOG.md with a top-level heading for the version.
- For cross-repo work, add an entry that references the epic and points to each repo’s PRs.
- Use a release checklist that includes: tests pass, docs updated,Changelog updated, and cross-repo verification.
Template snippet for each repo:
- Version: 0.3.1
- Added: cross-repo coordination note EPIC-123
-
Fixed: bug in integration layer affecting all services
5) Local development workflow
Start from develop: git fetch origin; git switch develop; git pull rebase upstream develop
Create feature branch: git switch -c feature/owner/short-desc
Work in isolation, commit often with meaningful messages.
When ready to share: push to origin; open a PR against develop.
Run repo-specific tests locally; if tests rely on other repos, document how to mock or run integration tests.
Tip: keep commits small and focused. A good rule of thumb is one logical change per commit.
6) Cross-repo testing strategy
- Unit tests per repo run quickly and validate isolated logic.
- Integration tests simulate cross-repo flows using a lightweight orchestration tool (e.g., a simple script or a CI matrix).
- Use a shared test harness repository or a subdirectory approach to run end-to-end locally where feasible.
Example: a minimal integration test runner (pseudo-shell) that spins up services and hits a health endpoint to verify a cross-repo feature works as a whole.
7) Git hooks and automation
Automate the boring parts to reduce mistakes:
- pre-commit: run linters, run unit tests, ensure commit messages follow the conventional commits pattern.
- commit-msg: enforce a structured message like feat(core): add cross-repo coordination hook
- pre-push: run the full test suite and a quick integration smoke test if applicable.
- post-merge: auto-update CHANGELOGs and bump version files if a release is imminent.
Automation ideas:
- A small script that, when you push a cross-repo coordination branch, updates a shared status file in a CI-ready format.
-
A bot that creates cross-repo PRs or updates their linked issues when all repos have approved changes.
8) PR hygiene for multi-repo flows
Title: [EPIC-123] Implement cross-repo coordination for feature X
-
Description:
- What changed in Repo A
- What changed in Repo B
- What changed in Repo C
- How to test manually (one-liner commands)
- Related issues and epic link
PR links: reference corresponding PRs in other repos.
Review notes: designate a primary reviewer in each repo; ensure reviewers check cross-repo implications in their scope.
Pro-tip: use a shared checklist template in each PR to ensure cross-repo alignment.
9) Versioning and releases
- Adopt a consistent version scheme across repos (e.g., MAJOR.MINOR.PATCH).
- For cross-repo changes, align the minor version bump unless a breaking change is introduced through coordination.
- Use a consolidated release note that aggregates cross-repo changes:
- Core changes in Repo A
- Service updates in Repo B
- Infra changes in Repo C
Automation idea: a release-assembly script that collects the latest PR titles from each repo and compiles them into a single release document.
10) Handling conflicts and reversions
- If a cross-repo change causes a regression, revert in each repo and open coordinated hotfix PRs.
- Prefer revert commits that reference the original PRs, to maintain traceability.
- Use a rollback plan in the release notes so operators know exactly how to revert.
Practical tip: never hide a failed merge behind a squash commit; preserve history to understand the chain of events.
11) Example workflow: a concrete scenario
Scenario: adding a shared authentication flow used by three services in three repos.
- A-new-auth feature branches in A, B, and C: feature/epic-auth
- Each repo implements its part:
- Repo A adds API endpoints and client library changes
- Repo B updates services to use the new auth flow
- Repo C updates infra to provision tokens and rotation
- Create coordination/EPIC-789 in all repos and reference each other’s feature PRs
- Run unit tests locally; run integration tests with a mocked environment
- Open PRs with cross-repo links and a combined changelog entry
-
After approvals, merge into develop; perform a coordinated release
12) Practical tips and pitfalls to avoid
Don’t force a cross-repo PR unless it clearly reduces risk or adds visible value.
Keep the coordination approach as lightweight as possible; if a feature can be implemented in one repo, do it there first.
Document cross-repo dependencies explicitly in the epic or release notes.
-
Establish a clear owner for cross-repo coordination to avoid drift.
13) Minimal starter tooling
If you want a plug-and-play start, consider:
- A small script repo that helps spawn and link coordination PRs across repos.
- A GitHub Actions workflow that validates cross-repo PR links and updates a summary file on PR creation.
- A central CHANGELOG generator that aggregates per-repo change logs for a given epic.
Sample pseudo-script (conceptual):
- Input: epic-id, repos list
- Actions:
- Create feature branches in each repo from develop
- Push branches and open PRs against develop
- Create a coordination note in each PR with links to the others
- Update a central epic page with the PR URLs and status
This is intentionally lightweight to stay adaptable; tailor it to your tooling.
14) Getting started: a quick 2-week plan
- Week 1: agree on conventions; set up branch templates and PR templates; pick a pilot cross-repo epic.
- Week 2: run a pilot with one cross-repo feature; document the process; refine PR hygiene and hooks.
By the end, you’ll have a repeatable, low-friction flow that keeps cross-repo work aligned and auditable.
If you’d like, I can tailor this to your stack (languages, CI/CD, hosting), or draft ready-to-use PR templates and a starter automation script. Do you want a version adapted to a specific set of repositories or a particular CI platform (GitHub Actions, GitLab CI, or CircleCI)?
-
Rizwan Saleem | https://rizwansaleem.co
Top comments (0)