Skip to content
FreeBSDNews Published Updated 4 min readViews unavailable

FreeBSD Completes Its Migration from Subversion to Git

FreeBSD moved documentation to Git on December 8, 2020, source on December 23, and Ports on April 6, 2021 while preserving its development history.

FreeBSD did not switch its entire development history from Subversion to Git in one weekend. It carried out three related cutovers: documentation on December 8, 2020, the base-system source tree on December 23, 2020, and the Ports Collection on April 6, 2021. Those dates matter because the migration was both a repository conversion and a change to infrastructure used every day by committers, release engineers, mirrors, and downstream consumers.

Three repositories, three exact cutovers

The FreeBSD Committer’s Guide records the boundaries precisely. The documentation repository ended its Subversion history at revision r54737; its first Git commit was 3be01a475855e7511ad755b2defd2e0da5d58bbe. The source repository followed on December 23, ending at Subversion revision r368820 and beginning its authoritative Git history with commit 5ef5f51aef3226907c4f679f3d19988e8f554f3f.

Ports required a separate conversion window. Its final Subversion revision was r569609 on March 31, but that was not the completion date. FreeBSD’s second-quarter 2021 status report says the conversion began that day and finished on April 6, when commit ed8d3eda309dd863fb66e04bccaa513eee255cbf opened the Git repository. Describing the migration as completed “at the end of March” confuses the last SVN marker with the later production cutover.

Why FreeBSD changed systems

By 2020, Git was familiar to a much larger share of prospective contributors and provided inexpensive local branches, distributed history, and flexible tooling. FreeBSD could reduce the learning gap for developers arriving from other projects and make repository access fit current development tools. The change also removed the need to maintain Subversion as the primary write path indefinitely.

That does not mean FreeBSD simply adopted another project’s review culture or made GitHub the canonical repository. The project’s authoritative repositories are served from git.FreeBSD.org, with web views available through FreeBSD’s cgit service. Reviews and commits continued to follow FreeBSD’s own policies. Git enabled more possible workflows, but the version-control format alone did not turn every contribution into a pull request.

Preserving history was part of the deliverable

A credible conversion had to retain decades of changes, authorship, branches, and tags, not merely import a current snapshot. It also had to produce a history whose references were internally consistent. The FreeBSD Foundation’s migration guidance warned users that an older experimental GitHub mirror contained errors and that the official conversion regenerated history; consequently, commit hashes from that mirror were not reliable identifiers for the new repository.

The exact first and last identifiers published by the project provide auditable boundaries between the two systems. They let maintainers establish whether an old reference belongs to SVN or Git, and they document continuity without pretending that an SVN revision number can be mechanically equated to a Git object ID.

The operational transition continued after cutover

Warner Losh’s December 2020 announcement explained that Subversion would become mostly read-only after the source migration. It also described a compatibility commitment: Git changes would be replayed into the remaining stable/11, stable/12, and associated release-engineering SVN branches for their supported lives. That bridge mattered to consumers whose automation still expected SVN even after Git became the source of truth.

A January 2021 status update reported that the source conversion itself was working with only minor issues, while project processes and supporting systems were still being adapted. That distinction is important. A repository can be authoritative on day one while hooks, build services, documentation, mirroring, vendor imports, and release procedures continue to be checked and refined.

Ports brought its own operational concerns: an unusually active tree, package-building infrastructure, commit hooks, and quarterly branches. The 2021 status report noted that the quarterly branch was Git-only after the conversion and that infrastructure work continued. It also tracked tools such as Gitup and Game of Trees, evidence that migration involved the surrounding ecosystem rather than only the central server.

What actually changed for users and contributors

Source and Ports users moved from revision-number-oriented commands such as Subversion update to branch-and-commit-oriented Git commands. Documentation and build instructions had to name the correct repository and branch. Scripts that parsed $FreeBSD$ keywords or assumed monotonically increasing SVN revisions required review. Existing local checkouts could not simply become official Git histories by changing a remote URL; users needed a valid clone or an update tool designed for the new service.

The staged schedule limited the blast radius. Documentation provided an earlier production cutover, source followed after its own preparation, and Ports waited until spring 2021. FreeBSD therefore completed one coordinated migration across three repositories without falsely treating them as identical workloads. The lasting milestone is not merely that the project “uses Git,” but that it changed the authoritative record while documenting its boundaries, preserving useful history, and maintaining transition paths for supported branches.

Related:

Sources:

Comments