Version Control with Git and GitHub/GitLab

Chapter 13
Repository Administration, Analytics, and Decision Making

Diploma in DevOps
Version Control with Git and GitHub/GitLab   •   Diploma

Repository Administration, Analytics, and Decision Making

Introduction and Context

A Git repository is more than a directory containing source files. It is a historical record, a collaboration platform, a security boundary, and an operational asset. Poor administration can make repositories slow, expose confidential information, increase recovery time, and produce misleading conclusions about engineering performance. Effective administration therefore combines technical maintenance with governance and responsible interpretation of evidence.

Repository administration includes archiving inactive projects, migrating repositories between platforms, backing up data, managing large files, reclaiming storage, and testing disaster recovery. Repository analytics complements these activities by showing how work flows through branches, pull requests or merge requests, reviews, releases, and incident correction. Analytics should support system improvement—not rank individuals unfairly or encourage unhealthy competition.

This chapter presents a practical framework for maintaining repository health and making evidence-based decisions in GitHub, GitLab, and comparable platforms.

Learning Objectives

By the end of this chapter, you should be able to:

  1. Assess repository health and identify administrative risks.
  2. Design archiving, migration, backup, and disaster-recovery procedures.
  3. Select appropriate strategies for large files and repository cleanup.
  4. Explain useful contribution, review, flow, defect, and DORA-related metrics.
  5. Interpret metrics with attention to context, data quality, and unintended consequences.
  6. Apply ethical principles that prevent analytics from becoming unfair individual surveillance.
  7. Recommend repository-management actions using a structured decision process.

1. Repository Health as an Operational Capability

Repository health describes the repository’s ability to preserve history, support collaboration, protect information, and deliver changes reliably. It has several dimensions:

DimensionTypical questions
AvailabilityCan authorised users access the repository when needed?
IntegrityIs history complete and protected from unauthorised alteration?
RecoverabilityCan the repository and related configuration be restored?
PerformanceAre clone, fetch, search, and web operations acceptably fast?
SecurityAre secrets, tokens, and sensitive files controlled?
MaintainabilityAre branches, permissions, dependencies, and workflows understandable?
ComplianceAre retention, audit, licensing, and deletion obligations satisfied?

Health is not identical to repository size. A large repository may be healthy if its structure and storage strategy are appropriate; a small repository may be unsafe if it has no backup or contains leaked credentials.

A useful initial assessment examines:

  • inactive repositories and obsolete branches;
  • repository ownership and administrator succession;
  • protected branches, required reviews, and status checks;
  • secrets and sensitive historical content;
  • binary files and unusually large objects;
  • backup coverage and restoration evidence;
  • dependency and vulnerability findings;
  • issue and merge-request backlogs;
  • audit logs and access permissions;
  • retention and legal requirements.

A repository inventory should record the owner, business purpose, classification, platform, primary language, activity level, dependencies, backup status, recovery priority, and planned lifecycle state.

2. Repository Lifecycle: Create, Maintain, Archive, and Retire

Repositories should have an explicit lifecycle rather than remaining indefinitely active. A typical lifecycle is:

Repository lifecycle from creation to retirement Createowner, purpose Operatesecure, review Archiveread-only, retain Retireapprove, delete Reactivation after review Each transition requires an owner, evidence, and an approved decision.
Repository lifecycle from creation to retirement
Figure: Repository lifecycle from creation to retirement

Figure: A controlled repository lifecycle with a possible return from archive to operation.

Archiving

Archiving is appropriate when active development has ended but the history remains useful for reference, audit, reproducibility, or legal reasons. Before archiving:

  1. Confirm the business and technical owner.
  2. Record the final release, commit, dependencies, and known limitations.
  3. Resolve or classify outstanding issues and merge requests.
  4. Remove active credentials and review historical secrets.
  5. Tag the final state and document how the software can be built.
  6. Change the repository to read-only or archived status.
  7. Preserve relevant CI configuration, documentation, and metadata.
  8. Define a retention period and an approval process for reactivation or deletion.

Archiving is not the same as deleting. Deletion should require explicit authorisation because it may affect audits, intellectual property, incident investigation, or reproducibility.

Branch and tag administration

Long-lived branches increase divergence and merge effort. Teams should define which branches are permanent, how release branches are retained, and when temporary branches are removed. Tags should be immutable by policy, particularly for released versions. Protected branches should require appropriate status checks and reviews, while emergency procedures should be documented rather than relying on informal administrator access.

3. Migration Between Git Platforms

Migration may be required because of organisational acquisition, cost, compliance, platform capability, or a change in hosting model. A repository migration can include more than Git commits:

  • branches and tags;
  • issues and merge requests;
  • comments, labels, and milestones;
  • releases and attached assets;
  • wiki pages and documentation;
  • webhooks, deploy keys, and access controls;
  • CI/CD definitions, variables, runners, and environments;
  • package registries, large-file objects, and audit records.

A sound migration has five stages.

Discovery

Create an inventory of repositories, owners, sizes, object types, permissions, integrations, legal classifications, and dependencies. Identify whether submodules, Git LFS, generated artifacts, or external services are present.

Design

Choose a migration method. A mirror clone can preserve Git refs, but it does not automatically transfer platform metadata. API-based migration may transfer issues and reviews but can have limitations. Decide what will be preserved, transformed, or intentionally excluded.

Pilot

Migrate representative repositories, including a small repository, a large repository, a repository with LFS, and one with complex CI/CD. Validate commit counts, branch tips, tags, file retrieval, permissions, webhooks, and build results.

Cutover

Announce a freeze window, disable or restrict writes to the source, perform the final incremental transfer, update URLs and secrets, and validate the destination. Redirect users rather than silently leaving two writable copies.

Verification and decommissioning

Compare source and destination inventories, test representative clones and releases, confirm audit and retention requirements, and retain the source temporarily according to a documented rollback plan. Decommission only after formal acceptance.

A checksum or object comparison can help verify content, but successful transfer of Git objects does not prove that issues, permissions, CI variables, or webhooks were transferred correctly.

4. Backup and Disaster Recovery

A backup is a recoverable copy maintained independently of the primary service. A clone on a developer’s laptop is not normally an adequate organisational backup because it may be incomplete, unencrypted, stale, or inaccessible.

What should be backed up?

The backup scope should include, as applicable:

  • Git repositories, all required refs, and Git LFS objects;
  • issues, merge requests, comments, labels, and releases;
  • wikis, packages, artifacts, and registry data;
  • repository settings, protected branches, teams, and permissions;
  • CI/CD configuration and encrypted variables, subject to security policy;
  • audit records and migration documentation.

Backups should be encrypted in transit and at rest, access-controlled, logged, and periodically tested. At least one copy should be logically or physically separated from the primary environment to reduce the effect of ransomware or administrator error.

Two recovery objectives are especially important:

  • Recovery Point Objective (RPO): the maximum acceptable amount of data loss, expressed as time. An RPO of 24 hours permits up to approximately one day of lost changes.
  • Recovery Time Objective (RTO): the target maximum time to restore an acceptable service after disruption.

These are service requirements, not properties automatically guaranteed by a backup tool.

Backup frequency should reflect RPO, but frequency alone is insufficient. A useful backup policy specifies retention, encryption, storage independence, access control, restoration procedures, ownership, and test frequency.

Recovery testing

A restoration test should use an isolated environment and verify that:

  1. the backup can be located and authenticated;
  2. repository history, branches, tags, and LFS objects are present;
  3. users and permissions are restored safely;
  4. builds and deployment workflows can run;
  5. integrations and webhooks are recreated where required;
  6. the measured restoration time satisfies the RTO;
  7. the observed data loss satisfies the RPO.

The recovery exercise should produce evidence, findings, and assigned corrective actions. A backup that has never been restored is an assumption, not demonstrated resilience.

5. Large Files, Repository Growth, and Garbage Collection

Git is optimised for versioned text and source code, not for repeated revisions of large binary assets. A large object can increase clone time, storage use, backup duration, and the cost of every future transfer.

Large-file strategies

SituationAppropriate strategy
Build output or temporary dataExclude with .gitignore; store in an artifact repository
Frequently changing large binariesGit LFS or an equivalent content store
Releases and installersRelease assets or package registry
Data setsVersioned data platform or object storage with metadata
A mistakenly committed secretRevoke it first, then carefully rewrite history if authorised
Historical large objects that must remainRetain them, or migrate them with a documented compatibility plan

.gitignore prevents untracked files from being added; it does not remove an object already committed. Removing a file from the current branch also does not remove it from all historical commits. History rewriting changes commit identifiers and can disrupt forks, clones, signed history, and downstream automation. It should therefore be planned, communicated, backed up, and followed by credential rotation when secrets are involved.

Git LFS stores pointer files in normal Git history while storing large content separately. Teams must back up both the Git repository and LFS storage. A repository that restores commits but not LFS objects is incomplete.

Garbage collection and maintenance

Git stores objects representing commits, trees, and file contents. Some objects become unreachable after branch deletion or history rewriting. Maintenance operations such as repacking and garbage collection can reduce redundant storage and improve performance, but they do not replace backup. Aggressive pruning can permanently remove objects that users still need or that are required for recovery.

Hosted services often manage server-side maintenance. Administrators should follow platform-specific procedures, avoid running destructive maintenance during active migration, and preserve a verified backup before pruning. Local maintenance may include checking repository integrity and measuring pack-file growth, but it should be coordinated for shared repositories.

Repository growth should be managed through policies: file-size limits, secret scanning, dependency scanning, artifact retention, branch cleanup, and periodic storage review.

6. Analytics for Repository and Delivery Decisions

Analytics turns repository events into indicators. Events may include commits, pushes, pull requests, reviews, comments, approvals, merges, deployments, releases, incidents, and defect reports. An indicator is useful only when its definition, data source, time window, population, and limitations are understood.

Contribution metrics

Contribution metrics may include:

  • number of commits or pull requests;
  • files or components changed;
  • review participation;
  • releases supported;
  • documentation, testing, and maintenance work;
  • proportion of changes merged or abandoned.

Commit count and lines changed are weak measures of value. A small security fix may be more important than hundreds of generated lines. A developer may also spend substantial time reviewing, debugging, mentoring, designing, or responding to incidents—work that simple contribution counts omit.

Review metrics

Useful review measures include review turnaround time, time from request to first response, review queue age, number of review cycles, and defect findings discovered before merge. These should be interpreted alongside change size, risk, reviewer availability, and whether the work was routine or exploratory.

A review process can be represented as a flow: change proposed → automated checks → human review → revision → approval → merge. Bottlenecks may arise from oversized changes, insufficient ownership coverage, flaky checks, or excessive approval requirements.

Flow metrics

A common flow measure is lead time for changes: the elapsed time from an agreed starting event, often first commit or work start, to successful production deployment. Teams must define the start and end events consistently.

For a set of completed items, the arithmetic mean lead time is:

L̄ = (1/n) ∑ᵢ₌₁ⁿ Lᵢ

Here, Li is the lead time for item i, n is the number of completed items, and L̄ is the mean lead time. The units must be the same, such as hours or days. The mean is sensitive to unusually long items, so the median and selected percentiles should also be considered. A percentile is meaningful only when the sample size and calculation convention are stated.

Other flow indicators include deployment frequency, work-in-progress, queue time, cycle time, change size, and blocked time. These indicators help locate system constraints; they should not be used as isolated targets.

Defect and reliability metrics

Important measures include escaped defects, defect age, mean time to restore service, rollback frequency, failed deployment rate, vulnerability remediation age, and incident recurrence. Definitions must distinguish defects found before release from those discovered by users, and service restoration from permanent defect correction.

A simple defect escape rate can be defined as:

Escape rate = Dₚ / (Dₚ + Dₜ) × 100%

Dp is the number of defects found after release in the selected period, and Dt is the number found before release. This measure assumes that both categories are recorded consistently and refer to the same population and time period. It is not a universal quality score: reporting practices, product risk, and defect severity affect interpretation.

7. DORA-Related Metrics and Their Responsible Use

DORA research popularised four delivery-performance measures:

  1. Deployment frequency: how often an organisation successfully deploys to production.
  2. Lead time for changes: how long it takes a change to reach production.
  3. Change failure rate: the proportion of deployments that require remediation, such as rollback, hotfix, or incident response.
  4. Time to restore service: how long it takes to restore service after an impairment caused by a change or operational event.

A deployment failure rate may be expressed as:

CFR = F / N × 100%

F is the number of qualifying failed deployments and N is the total number of qualifying deployments in the same period. The formula is applicable only when the organisation defines “failure” consistently. A deployment that is intentionally rolled back for a non-defect business decision should not automatically be classified as a technical failure.

DORA metrics are system-level indicators. They are most useful for comparing a team with its own historical performance, examining relationships between delivery speed and reliability, and identifying constraints. They should not be used to rank individuals, compare teams with different products without adjustment, or impose universal numerical targets. Increasing deployment frequency by splitting trivial changes, or reducing reported failures by suppressing incident classification, would create metric gaming rather than improvement.

8. Ethical Analytics and Fair Governance

Repository analytics can become surveillance when every event is treated as evidence of individual effort or commitment. Ethical governance requires proportionality, transparency, purpose limitation, data minimisation, and fairness.

Principles for responsible use

  • Purpose limitation: define the operational question before collecting data.
  • Transparency: explain what is measured, how it is calculated, and who can see it.
  • Context: consider role, seniority, system constraints, on-call work, leave, accessibility needs, and incident duties.
  • Aggregation: prefer team, service, or process-level reporting over individual rankings.
  • Data minimisation: retain only data needed for the stated purpose.
  • Human review: never make employment decisions solely from automated indicators.
  • Appeal and correction: allow people to challenge inaccurate or misleading records.
  • Security and retention: protect analytics data and delete it when no longer justified.

A metric is not neutral merely because it is numerical. For example, low commit volume may reflect architectural work, review responsibilities, or a stable period; high commit volume may reflect fragmented commits or rework. Fair decision making asks what the evidence means, what it omits, and what behaviour it may encourage.

9. A Decision Framework for Repository Administration

A practical decision process is:

  1. State the decision. For example: archive, migrate, introduce LFS, increase backup frequency, or investigate a flow bottleneck.
  2. Define success and constraints. Include security, cost, RPO, RTO, compliance, performance, and user impact.
  3. Collect validated evidence. Use repository inventories, audit records, storage measurements, incident data, and stakeholder interviews.
  4. Separate facts from interpretations. “Median review time increased” is evidence; “the team is careless” is an unsupported conclusion.
  5. Assess alternatives and risks. Consider reversibility, migration failure, data loss, privacy, and operational disruption.
  6. Pilot or stage the change. Test on representative repositories before broad deployment.
  7. Document ownership and review dates. Every policy needs a responsible owner and a mechanism for revision.
  8. Measure outcomes. Determine whether the intervention improved reliability, recovery, performance, or flow without creating harmful side effects.

Applied Case: Migration and Health Improvement at Northstar Services

The following is a fictional illustrative case.

Background

Northstar Services operates 180 Git repositories across two independently managed platforms. Several repositories contain large design files, backups are performed only by the hosting provider, and delivery reports focus on commit counts. A merger requires consolidation onto a managed GitLab instance.

Problem

An inventory finds 46 repositories with no active owner, 12 repositories containing binary files larger than the organisation’s policy limit, and inconsistent branch protection. The infrastructure team claims that nightly snapshots are sufficient, but no restoration test has been completed. Managers also use individual commit counts in performance discussions.

Analysis

The migration team classifies repositories as active, archived, or candidates for retirement. It discovers that Git LFS objects are stored separately from Git objects and that several CI variables are configured outside repository files. A pilot shows that a mirror clone preserves branches and tags but not issues, approvals, protected-branch rules, or webhooks. Analytics review shows that commit counts vary greatly by role and correlate poorly with review and incident work.

Approach and solution

Northstar assigns an owner and data classification to every active repository. Archived projects become read-only after approval. Large changing binaries move to Git LFS, while generated packages move to the package registry. The team performs a pilot migration, freezes writes during final cutover, transfers metadata through the platform API, and verifies builds, permissions, releases, and LFS retrieval.

The backup policy is revised to include repositories, LFS, metadata, and configuration. The organisation sets an RPO of 24 hours and an RTO of eight hours for standard services, then tests restoration in an isolated environment. It retains an independent encrypted copy and documents credential rotation after migration.

For analytics, Northstar replaces individual commit rankings with team-level median lead time, deployment frequency, change failure rate, review queue age, and escaped-defect trends. Metrics are reviewed quarterly with engineers and managers, and contextual notes accompany each report.

Outcome

The migration completes with no loss of release history. Restoration testing identifies a missing LFS backup before an incident occurs. Repository storage falls after generated artifacts are relocated, while clones become faster for active projects. Managers identify a review bottleneck caused by two overburdened code owners rather than blaming individual developers. The new dashboards support decisions about ownership, automation, and review capacity.

Learning points

  1. Repository migration includes platform metadata and integrations, not only Git objects.
  2. Backup quality is demonstrated through restoration.
  3. Large-file policy must distinguish source, releases, artifacts, and data.
  4. Team-level flow and reliability metrics are more defensible than simplistic individual counts.
  5. Governance and technical controls must be designed together.

Challenges and Limitations

Repository administration involves trade-offs. Retaining all history supports auditability but increases storage and exposure. Rewriting history can remove sensitive content from reachable commits but may damage references and does not guarantee that copies elsewhere are erased. More frequent backups improve potential data loss but increase cost and management complexity. Strict review controls improve assurance but may create queues when ownership is too narrow.

Analytics also has measurement error. Event timestamps can be affected by time zones, amended pull requests, squashed commits, delayed issue updates, and incomplete deployment instrumentation. Metrics may be incomparable across tools or teams unless definitions are standardised. Correlation does not establish causation: a change in lead time may result from product scope, staffing, incident load, or seasonal demand.

Automation and AI can assist with anomaly detection, repository classification, secret detection, summarising review queues, and suggesting ownership. However, automated findings require human validation. AI systems may expose confidential code to external services, reproduce biased classifications, or generate confident but incorrect explanations. Organisations should define approved tools, data boundaries, auditability, and human accountability before using AI with repository data.

Best-Practice Checklist

  • Maintain an authoritative repository inventory.
  • Assign owners, classifications, and lifecycle states.
  • Protect default and release branches.
  • Separate source code, artifacts, packages, data, and secrets.
  • Back up Git objects, LFS, metadata, and configuration as required.
  • Test restoration and record measured RPO and RTO.
  • Pilot migrations and validate integrations, not only commit history.
  • Use file-size controls, secret scanning, and retention policies.
  • Perform garbage collection only with a verified recovery path.
  • Define analytics precisely and publish limitations.
  • Prefer aggregated, contextual metrics over individual surveillance.
  • Review whether metrics encourage gaming or unsafe behaviour.
  • Record decisions, owners, evidence, and review dates.

Chapter Summary

Repository administration is a lifecycle discipline involving ownership, security, performance, preservation, and controlled retirement. Archiving should make inactive repositories read-only while preserving useful history and documentation. Migration requires discovery, piloting, cutover control, metadata transfer, verification, and rollback planning. Backup must cover the repository and associated platform data, and recovery testing is essential evidence of resilience. Large files should be directed to Git LFS, artifact stores, package registries, or data platforms according to their purpose. Garbage collection can reclaim unreachable objects but must not be confused with backup.

Repository analytics supports decisions about contribution, review, flow, defects, and delivery reliability. DORA-related metrics are system-level indicators that require consistent definitions and contextual interpretation. Means, medians, rates, and percentiles describe observed processes but do not explain causes by themselves. Ethical governance requires transparency, proportionality, data minimisation, aggregation, human judgement, and protection against unfair individual surveillance. The central professional principle is to use repository evidence to improve systems and learning, not to reduce complex engineering work to simplistic counts.

Key Terms

Repository health: The repository’s capacity to remain secure, usable, maintainable, and recoverable.

Repository lifecycle: The controlled progression from creation through operation, archiving, and retirement.

Archive: A read-only repository state retained for reference, audit, or reproducibility.

Migration: The transfer of repository content, metadata, configuration, and integrations to another platform or environment.

Git object: A stored Git entity such as a commit, tree, blob, or annotated tag.

Git LFS: Git Large File Storage, which keeps pointer files in Git and large content in separate storage.

Garbage collection: Maintenance that repacks objects and may remove unreachable objects according to retention rules.

Backup: An independently retained copy from which data can be restored.

RPO: Recovery Point Objective; the maximum acceptable period of data loss.

RTO: Recovery Time Objective; the target time for restoring an acceptable service.

Lead time for changes: Elapsed time from a defined work-start event to successful production deployment.

Deployment frequency: How often qualifying production deployments occur.

Change failure rate: The proportion of qualifying deployments requiring remediation.

Time to restore service: The time required to restore service after a qualifying impairment.

Escaped defect: A defect discovered after release or in a later operational stage.

Metric gaming: Changing behaviour or records to improve a metric without improving the underlying outcome.

Data minimisation: Collecting and retaining only data necessary for a legitimate purpose.

Repository owner: The person or group accountable for a repository’s purpose, access, maintenance, and lifecycle.

Recovery test: A controlled exercise that demonstrates whether data and service can be restored.

Review Questions

Short Answer Questions

  1. Why is archiving different from deleting a repository?
  2. What information besides Git commits may need to be transferred during migration?
  3. Define RPO and RTO.
  4. Why does .gitignore not remove a file already committed to history?
  5. State two ethical risks of using commit counts to evaluate individuals.

Long Answer Questions

  1. Explain a complete repository migration process from discovery through decommissioning.
  2. Compare Git LFS, release assets, package registries, and artifact storage as strategies for large files.
  3. Explain why a restoration test is necessary even when backups run successfully every night.
  4. Discuss the four DORA-related metrics and the conditions required for meaningful interpretation.
  5. Design a repository lifecycle and governance policy for an organisation with many inactive projects.

Analytical / Application Questions

  1. A team’s deployment frequency increases, but its change failure rate and restoration time also increase. Analyse at least three possible explanations and recommend additional evidence before deciding whether performance improved.
  2. During migration, all commits and tags arrive successfully, but issues, protected branches, CI variables, and LFS objects do not. Identify the risks and propose a verification and remediation plan.
  3. A manager proposes ranking developers by commits, lines changed, and pull requests merged. Construct an alternative team-level measurement approach that supports improvement while reducing surveillance and metric gaming.

Multiple Choice Questions with Answers

Question 1

Which action best demonstrates that a repository backup is recoverable?

A. Checking that the backup job reports success

B. Keeping a second copy on a developer laptop

C. Restoring the backup in an isolated environment and validating history and files

D. Increasing the number of branches in the repository

Correct Answer: C. Restoring the backup in an isolated environment and validating history and files

Question 2

What does an RPO specify?

A. The target time to restore service

B. The maximum acceptable period of data loss

C. The number of reviewers required for a merge

D. The maximum size of a Git object

Correct Answer: B. The maximum acceptable period of data loss

Question 3

Which statement about .gitignore is correct?

A. It removes matching files from all historical commits

B. It prevents matching untracked files from being added under normal use

C. It encrypts matching files before commit

D. It automatically moves matching files to Git LFS

Correct Answer: B. It prevents matching untracked files from being added under normal use

Question 4

Which item is most likely to require separate migration validation rather than a mirror clone alone?

A. A commit object

B. A tree object

C. A protected-branch rule

D. A lightweight tag

Correct Answer: C. A protected-branch rule

Question 5

In the formula CFR = F / N × 100%, what does N represent?

A. The number of qualifying deployments

B. The number of developers

C. The number of files changed

D. The number of unresolved defects

Correct Answer: A. The number of qualifying deployments

Question 6

Why should DORA-related metrics generally be used at team or system level?

A. Individual activity is always impossible to record

B. They describe delivery-system performance and can be distorted by role and context when applied to individuals

C. They measure only source-code size

D. They are valid only for archived repositories

Correct Answer: B. They describe delivery-system performance and can be distorted by role and context when applied to individuals

Question 7

A repository contains frequently changing large binary files. Which strategy is generally most appropriate?

A. Store every generated copy in ordinary Git history

B. Use Git LFS or a suitable content-storage system

C. Disable all backups

D. Rename the files with shorter names

Correct Answer: B. Use Git LFS or a suitable content-storage system

Question 8

Which practice is an example of responsible analytics governance?

A. Publishing individual rankings without context

B. Changing definitions whenever a metric declines

C. Explaining metric definitions and using aggregated reports for process improvement

D. Using automated metrics as the sole basis for dismissal

Correct Answer: C. Explaining metric definitions and using aggregated reports for process improvement

Question 9

What is a principal risk of aggressive garbage collection after history rewriting?

A. It may permanently remove objects still needed for recovery

B. It automatically creates a complete off-site backup

C. It transfers issues to a new platform

D. It guarantees faster production deployments

Correct Answer: A. It may permanently remove objects still needed for recovery

Question 10

A team has a mean lead time of 6 days, but one unusually long item takes 40 days. Which additional statistic is especially useful for understanding the typical item?

A. The median lead time

B. The repository owner’s name

C. The number of Git tags

D. The file extension of the largest object

Correct Answer: A. The median lead time

Version Control with Git and GitHub/GitLab
Chapter 13 of 14