Google Sign-In Required

Use your company Google account to access the BetterFleet private content.

Back to private home

BetterFleet Support Private
Skip to content
BetterFleet Dev Wiki
Monolithic Git Transition FAQ
Initializing search
    bf-dev
    • Home
    • Process
    • Products
    • Reference
    • Decisions
    • Work
    • Operations
    bf-dev
    • Home
      • Process Handbook
      • BetterFleet Workflow Map
      • Product Development System
      • Product Engineering Workflow
        • Process Workflows
        • Work Intake and Weekly Planning
        • Product Engineering Workflow in Linear
        • Product Engineering Delivery
        • Agent Guidance
        • Workflow
        • Skills
        • Skill Sources
        • Process Guides
        • GitLab Feature Flags
        • In-App Docs Authoring
        • Release Notes
        • Process Templates
        • Release Plan: <title>
      • Process Publishing
      • Product overview
        • General Reference
          • Core Domain Training
          • System Topology
          • Two-Axis Ontology Model
          • Ontology Primer
          • Worked Example
          • Evidence, Ownership, and Lineage
          • Energy Management
          • Standards and Protocol Map
          • Charging, Roaming, and Commercial Model
          • Charge Planning and Operations
          • Cross-Cutting Domains
          • Domain Coverage Matrix
        • BetterFleet Product Ontology
        • Core Operations Data Ontology
        • BetterFleet R&D Plan
        • Index
        • Architecture
        • Manage Product Capabilities
        • Manage Data and State
        • Manage Service Interaction Flows
        • Manage Reference
        • Manage Internal Application Diagrams
          • Manage Authorization And Permissions
          • bf-manage-core Auth and Authorization Model
          • Manage Authorization and Permissions
          • bf-manage-web Auth and Permission Model
          • Manage Service Catalog
          • bf-depot-sim
          • bf-digital-twin (Manage Role)
          • bf-fleet-health
          • bf-manage-connect
          • bf-manage-core
          • bf-manage-incidents
          • bf-manage-roaming
          • bf-manage-sitepwrmon
          • bf-manage-web
          • bf-schedule-creator (Manage Role)
          • bf-support-microsite
          • bf-telematics
        • Index
        • Architecture
        • Plan Reference
        • Plan Internal Application Diagrams
        • Plan Migration and Flags
        • Plan Simulation Request Lifecycle
          • Plan Service Catalog
          • bf-bnl-schedule-analysis-compute
          • bf-bnl-settings
          • bf-bnl-ui
          • bf-digital-twin (Plan Role)
          • bf-route-modelling
          • bf-schedule-creator (Plan Role)
      • Where to Ask Product Questions
      • Reference
        • Platform Reference
        • Platform Architecture
        • Script Runtime Model
        • Compose Profiles and Modes
        • Repository Map
        • Monolithic Git Transition FAQ
          • How should the cut-over work?
          • What happens to open downstream merge requests?
          • What should I do with local branches, experiments, and stashes?
          • Do I need the whole repository checked out locally?
          • What if someone still pushes directly to a downstream repository?
          • How do rollbacks work?
          • Where do merge conflicts get resolved?
          • Can I keep different services on different revisions locally?
          • How should commit messages work if one commit syncs to several downstream repos?
          • Will CI/CD become noisier or more fragile?
          • Which repositories are in scope for the first migration?
          • How much disk space do worktrees use?
          • Is this the final architecture?
          • What mental model should I use inside the monolithic repo?
        • Monolithic Git Sizing
        • CI and Release Integration
        • Shared Reference
        • Shared Infrastructure Architecture
        • Secrets and Env Strategy
        • Vendors and Local Dependencies
        • System Reference
        • Cloud Data Dependencies
        • Ports and URLs
        • Service Matrix
          • API Docs
          • OCPI API Docs
          • OCPP API Docs
          • OSCP API Docs
          • VDV API Docs
          • Yard State API Docs
        • System Design
        • System Design: BBA Microgrid Controller Generic Packet Translation
        • System Design: Depot Simulation
        • System Design: IoT Sensor Packet
        • System Design: Microgrid Energy Orchestration
          • System Design: OCPP Profile 3 And ISO 15118 PKI
          • Architecture: BetterFleet OCPP Profile 3 and ISO 15118 PKI
          • Specification: BetterFleet OCPP Profile 3 and ISO 15118 Certificate Lifecycle Management
          • System Design: On-Prem Control
          • Challenge
          • Specification: BetterFleet On-Prem Continuity Control
          • System Design: OSCP
          • OSCP Protocol Documentation
          • Depot Sim Testing Requirements
          • System Design: OSCP Flexibility Provider Domain
      • Decisions
        • Architecture Decision Records
        • 0001 - Record architecture decisions
        • 0002 - Cognito for Authentication and Authorisation
        • 0003 - AWS Amplify for Authentication
        • 0004 - DynamoDB for default database
        • 0005 - Data Persistence
        • 0006 - Trunk-Based Development
        • 0007 - Generalised principle for automation
        • 0008 - Naming Repositories, Services, and URLs
        • 0009 - Use Timezone Aware DateTimes and UTC
        • 0010 - Use semantic release
        • 0011 - Centralized feature flag repository
        • 0012 - Use Named Exports in Storybook
        • 0013 - RESTful TITLE GraphQL
        • 0014 - Service Granularity
        • 0015 - Async/co-routine exception handling pattern
        • 0016 - Logging & log levels
        • 0017 - Instantiated Models
        • 0018 - Repository Pattern for Database Access
        • 0019 - Use of Design Tokens in TypeScript React Application
        • 0020 - API backwards compatibility and versioning
        • 0021 - Alembic Migration strategy
        • 0022 - Consistent react-hook-form usage
        • 0023 - Domain Event-Driven Architecture
        • 0024 - Domain Event Bus Tech Stack
        • 0025 - No enum types in DB table columns
        • 0026 - In-Memory Ormar Stores for Repository testing
        • 0027 - Storing Tab State in Query and Local Storage
        • 0028 - Adopt OpenTelemetry Semantic Conventions for Structured Logging
        • 0029 - Adopt RFC 9457 for HTTP Error Responses
        • 0030 - Use GitLab registry and Terraform state for ECS services
        • 0031 - Adopt DDD, Hexagonal Architecture, and CQRS for Python Domain Services
      • Work
        • Active Work
          • Work: Bba Microgrid Controller
          • Implementation Specification: BBA Microgrid Controller
          • BBA Microgrid Controller Deliverables (Stories)
          • Work: BFDev Monolithic Git
          • Challenge
          • Specification: BFDev Monolithic Git v2
          • BFDev Monolithic Git v2 Stories
          • Work: Complex Circuit Load Balancing
          • Implementation Specification: Complex Circuit Load Balancing
          • Complex Circuit Load Balancing Deliverables (Stories)
            • COR-10 and COR-11 Consolidation Review
          • Work: Dispatch Reliability and Reconciliation
          • Challenge
          • Specification: Dispatch Reliability and Reconciliation
          • Dispatch Reliability and Reconciliation (Unit User Stories)
            • Dispatch populated vehicle cards grey surface snapshot
            • Dispatch Visual Review
          • Work: Enable Scheduled Managed Charger Access
          • Challenge: Enable Scheduled Managed Charger Access
          • Specification Exploration Dossier: Enable Scheduled Managed Charger Access
          • Specification Review: Enable Scheduled Managed Charger Access
          • Specification: Enable Scheduled Managed Charger Access
          • Work: Guided Cut-Off and Release Orchestration
          • Specification: Guided Cut-Off and Release Orchestration
          • Guided Cut-Off and Release Orchestration (Unit User Stories)
          • Work: Production Deployment Validation
          • Challenge
          • Work: Scheduled Report Parity
          • Specification: Scheduled Report Parity
          • Work: Telematics
          • Telematics EventBridge Path
          • Telematics Ingress Architecture
          • Specification: Telematics Migration into bf-manage-core with 5-Minute Freshness and Health Visibility
          • Telematics Core Migration MVP (Implementation-Time BDD)
          • Work: Vector Derms
          • Implementation Specification: Vector DERMS
          • Vector DERMS Deliverables (Stories)
          • Work: Visiting Vehicle Charging Visibility
          • Specification: Visiting Vehicle Charging Visibility
          • Visiting Vehicle Charging Visibility (Unit User Stories)
          • Work: Workspace Owned Stripe Roaming
          • Specification: Workspace-Owned Stripe Credentials for Roaming Payments
        • Backlog Work
          • Work: Microgrid
          • Microgrid Backlog Stories
          • Work: Mobile Ops Companion
          • Challenge
          • Specification: Mobile Operations Companion v1
          • Mobile Operations Companion Deliverables (Stories)
          • Work: Oscp
          • OSCP Backlog Stories
        • Archived Work
          • Work: Code Canonical Orchestration
          • Challenge
          • Specification: Product Engineering Workflow
          • Product Engineering Workflow Deliverables (Unit User Stories)
          • Work: Release Notes Automation
          • Release Plan: Release Notes Automation
          • Release Notes Automation Backlog Stories
      • Operations
      • Onboarding Runbook
        • Operations Runbooks
        • Production Hotfix Release
        • Staging Hotfix Release
        • Manage Staging Release Validation
        • Terraform Plan Dry Runs
        • Operations Tooling
        • Code Indexing
        • Operations Evidence
        • Database Restoration Test Report
      • Daily Operations Runbook
      • Testing Guide
      • Troubleshooting
    • How should the cut-over work?
    • What happens to open downstream merge requests?
    • What should I do with local branches, experiments, and stashes?
    • Do I need the whole repository checked out locally?
    • What if someone still pushes directly to a downstream repository?
    • How do rollbacks work?
    • Where do merge conflicts get resolved?
    • Can I keep different services on different revisions locally?
    • How should commit messages work if one commit syncs to several downstream repos?
    • Will CI/CD become noisier or more fragile?
    • Which repositories are in scope for the first migration?
    • How much disk space do worktrees use?
    • Is this the final architecture?
    • What mental model should I use inside the monolithic repo?
    1. Home
    2. Reference
    3. Platform
    Shared Technical

    Monolithic Git Transition FAQ¶

    This page captures current contributor guidance for the BFDev monolithic Git transition. It complements the active BFDev Monolithic Git specification and keeps open questions explicit where the migration process is still being validated.

    Note

    This guidance reflects the current transition intent. Items marked as still being validated should be treated as working guidance rather than final cut-over policy.

    How should the cut-over work?¶

    The intent is a proactive setup period followed by a clean authoring cut-over:

    • contributors clone and set up the monolithic bf-dev workspace before cut-over;
    • contributors can experiment, branch, and validate locally in advance;
    • once cut-over happens, new merge requests should be created from bf-dev, not from the downstream service repositories;
    • bidirectional day-to-day authoring should be avoided because it increases sync risk and ambiguity.

    What happens to open downstream merge requests?¶

    The preferred cut-over state is zero open downstream merge requests.

    If downstream merge requests still exist at cut-over time, they should usually be migrated or closed rather than merged later in parallel with the new authoring model. Manual migration may be possible with targeted Git history work, but there is not yet a standard documented process for doing that safely at scale.

    What should I do with local branches, experiments, and stashes?¶

    You do not need to delete old local work.

    For work you want to preserve, the safest current path is to turn it into an explicit commit in the old repo, then move it into bf-dev with normal Git tools such as cherry-pick or by manually reapplying the change. Stashes may need extra cleanup because directory paths will differ between the old repo layout and the monolithic layout.

    Older experimental stashes should be treated case by case. The transition does not require every historical stash to be migrated automatically.

    Do I need the whole repository checked out locally?¶

    Not necessarily. If you only need part of the monorepo working tree, use sparse checkout.

    Sparse checkout is the main answer to concerns about editor load, local tooling scope, and bringing in repositories you do not actively work on. The current sizing measurements show sparse checkouts such as bf/manage-core at 38M, bf/manage-web at 119M, and bf/digital-twin at 314M; see Monolithic Git Sizing.

    What if someone still pushes directly to a downstream repository?¶

    Do not rely on reverse sync from downstream repos back into bf-dev.

    The safer operating model is to prevent direct pushes and new merge requests in the old repos once the team has cut over. Accidental downstream changes are expected to be riskier and harder to reason about than normal bf-dev-first authoring.

    How do rollbacks work?¶

    From a deployment perspective, rollbacks remain repository-local: use the existing downstream repo and pipeline rollback path for the affected service.

    From a source-control perspective, revert the relevant change in bf-dev and let the normal synchronization path propagate that reversion to the affected downstream repositories.

    Where do merge conflicts get resolved?¶

    After cut-over, contributor conflicts should be resolved in bf-dev.

    The goal is to avoid a separate class of bf-dev versus downstream conflicts by stopping normal direct authoring in downstream repos. If two contributors change the same file or overlapping areas, that conflict is handled in bf-dev in the same way it would be handled in any other shared repository.

    Can I keep different services on different revisions locally?¶

    Yes, but it is less convenient than the current multi-repo model. The current guidance is to use git worktree when you need two revision combinations side by side.

    For example, one worktree can hold the latest state while another holds an older revision for comparison or backwards-compatibility testing. This remains compatible with the transition goal of making worktree-based validation more normal.

    How should commit messages work if one commit syncs to several downstream repos?¶

    The synced downstream commit history will reflect the bf-dev authoring history, so a commit message may make most sense in bf-dev and less sense when viewed in isolation in one downstream repository.

    If a contributor wants cleaner downstream history for a particular change, the practical option is to keep service-specific commits separate instead of relying on one fully squashed cross-service commit.

    Will CI/CD become noisier or more fragile?¶

    The intended model keeps downstream pipelines as the authoritative delivery path.

    In the transition design, bf-dev automation is a lightweight synchronization layer that pushes the relevant directory changes downstream. The working assumption is that pipeline load is driven more by overall change velocity than by the monolithic authoring model itself.

    Which repositories are in scope for the first migration?¶

    The initial migration cohort is the current set of repositories listed in projects.txt.

    The rationale is operational simplicity: one clean cut-over is easier to reason about than a mixed authoring model where only some repositories participate.

    How much disk space do worktrees use?¶

    git worktree is cheaper than maintaining several full clones because Git history is shared, but checked-out working files still take space.

    The current measured upper bound is 11.8G for one full monolithic repository instance with host-installed dependencies. Each extra worktree adds about 606M of checkout size, and about 8.5G total if it also installs its own host dependencies. A base repo plus five additional fully provisioned worktrees comes out to 54.3G; see Monolithic Git Sizing.

    If you install host dependencies separately in each worktree, those dependencies are duplicated. If you use Docker-based workflows, image layers and container infrastructure are reused, which makes the multi-worktree setup comparatively lighter.

    Is this the final architecture?¶

    No. This transition is an authoring-repository change, not a runtime consolidation decision.

    The current direction treats monolithic bf-dev as a lightweight layer over the existing service topology so the team can simplify authoring first. It may make later service or pipeline consolidation easier, but it does not itself commit the platform to that future state.

    What mental model should I use inside the monolithic repo?¶

    Think of service directories the same way you already think about major modules inside a large codebase: they are still bounded areas with their own responsibilities, but they now live in one authoring surface.

    The change is mainly about reducing Git and review friction, not about pretending the underlying services no longer exist.

    Made with Material for MkDocs
    BFDev Docs Assistant
    New conversation?
    Ask one focused question at a time, this helps the assistant provide accurate answers about what's been implemented in BetterFleet.