Software companies
Old SVN, Perforce or TFVC history: is it worth converting?
By SourceX Editorial · Updated
Short answer
Old SVN, Perforce or TFVC history is worth converting to Git when anyone still needs it for blame, audits, IP questions or a possible data license, and only if the conversion keeps authors, dates, messages and branches. If none of those needs apply, a verified read-only archive of the original repository is enough.
Key takeaways
- A tip-only migration keeps today's code and throws away the reasoning recorded in years of commits.
- Build an author map before converting; bare usernames without names and emails are hard to repair later.
- Write the original revision or changelist number into each commit message so every Git commit traces back to its source.
- Scan converted history for credentials and third-party code before anyone outside engineering sees it.
When is legacy version control history worth converting?#
Legacy version control history is worth converting when it answers questions people still ask: why a module behaves the way it does, who wrote a disputed component, or what changed before a customer incident. It is also worth converting if the company may license engineering records, because commit history with real messages is part of what makes code records useful to AI developers.
If the old code is fully retired and nobody needs its history, a verified, read-only dump of the original repository is cheaper and safer than a conversion. The worst option is the common one: a tip-only import into Git followed by decommissioning the old server.
| Option | What you keep | Effort | Best when |
|---|---|---|---|
| Full conversion to Git | Authors, dates, messages, branches and tags | Highest | History is still read, audited or may be licensed |
| Partial conversion | Main line and release branches only | Moderate | Experimental branches add noise without value |
| Read-only archive of the original | Everything, in the original format | Low | History is rarely needed and the old tool can still run |
| Tip-only import | Current files only | Lowest | History truly has no use, which is rare |
What old history contains that a snapshot does not#
Old history contains the sequence of decisions behind the code: commit messages explaining intent, authorship, the order of changes, branch and merge points, and references to bug IDs from trackers that may also have been retired. A snapshot keeps the result and drops every one of those.
In TFVC, changesets are often linked to work items in Azure DevOps Server or Team Foundation Server, and Perforce teams may keep review records in a separate review tool. Inventory those links before conversion, because the converted repository will not carry them unless you add references on purpose.
Old history also settles ownership questions. When an acquirer, an investor or a licensee asks who wrote a component and when, the original commits with real authors are the evidence; a snapshot dated on migration day says nothing about origin.
- 01Your work records
- 02Personal details removed
- 03You approve the release
- 04Licensed to AI developers
Conversion steps that keep authors, dates and messages#
Conversion steps that preserve history follow the same pattern for SVN, Perforce and TFVC, even though the tools differ. Common open-source choices include git svn and svn2git for Subversion, git-p4 for Perforce, and git-tfs for TFVC.
Some built-in or hosted import paths bring over only recent history or only one branch, so confirm what a tool keeps on a small test repository before running it on the main one. Record the tool, its version and every option used, because a reviewer may later need to reproduce or explain the result.
- Inventory every repository, depot or collection, with its layout and size.
- Freeze commits and take a verified backup or dump of the original.
- Build an author map from every username to a real name and email, including departed staff.
- Map the layout: trunk, branches and tags in SVN; depot paths and streams in Perforce; branch folders in TFVC.
- Run the conversion with the original revision or changelist number written into each commit message.
- Move large binaries to Git LFS or exclude them, and record what was excluded.
- Validate: compare revision and commit counts, spot-check authors and dates, and diff the final tree against the original tip.
- Keep the original dump read-only and save the conversion settings beside it.
Problems that break a conversion#
Problems that break conversions usually come from how the old repository was used rather than from the tool. Non-standard SVN layouts, branches created by copying subfolders, Perforce integrations between unrelated paths and TFVC branches created partway through history all confuse automated mapping.
Shared accounts are the other common issue. If a build user or a generic team login made commits, the author map cannot assign them to a person, so record them as a named service account rather than guessing.
Encoding and line-ending differences cause quieter damage. Old commit messages in legacy character sets, or files whose line endings changed between platforms, can make validation diffs noisy, so settle the rules before the full run.
Checks before history leaves engineering#
Checks before history leaves engineering focus on what years of commits can hide: credentials, third-party code, customer-specific work and personal data in test fixtures. Run them on the full converted history, not just the latest tree, because a password removed years ago is still in every earlier commit.
- Secret scanning across every commit, not only the current tree; if you use Gitleaks, note that its maintainer has declared it feature complete, with security patches only from here on.
- TruffleHog covers Git history as well and can test whether a credential still works by logging in with it, which needs care when the target systems belong to others.
- Third-party and vendored code, including licensed SDKs that cannot be redistributed.
- Branches or folders written for a specific customer under a services agreement.
- Contractor contributions without signed IP assignments.
- Real customer or employee data copied into fixtures or sample files.
Illustrative: a warehouse software vendor retires its Perforce server#
Illustrative: a fictional warehouse management software vendor moved to GitHub years ago with a tip-only import. The old Perforce server still runs on a virtual machine that IT wants to retire, and only one senior engineer remembers how to log in.
The CTO chooses a full conversion of the main depot and release branches. The team builds an author map from Perforce user records and old staff lists, writes changelist numbers into commit messages, and stores the result as an archived repository beside the current one.
A secret scan finds old database passwords, which are confirmed rotated and recorded, and a vendored barcode SDK is flagged for exclusion. The Perforce checkpoint is kept read-only, and the converted history is added to the company's data inventory.
How SourceX evaluates legacy version control history#
SourceX evaluates legacy history with the SourceX Enterprise Data Value Framework. Human-generated signal and domain expertise rise when commit messages explain intent and reference issues, data cleanliness rises with a reliable author map, recency is lower for old history, and rights depend on who owns each contribution.
The first look relies on descriptions of the repositories, not the code itself. If converted history moves into a package, the provenance section of the SourceX Evidence Packet records the conversion steps and exclusions, so a buyer can see how the Git history relates to the original system.
Frequently asked questions
Should we keep the original server after converting?
Keep a verified dump or checkpoint of the original repository in read-only storage, even if the server itself is retired. It is the reference if anyone questions the conversion, and it preserves metadata such as properties or labels that Git does not represent.
Can we convert only some branches?
Yes. Many teams convert the main line and release branches and leave the rest in the original dump. Record which branches were left out and why, so a later reviewer does not assume that missing history never existed.
Does converting history change who owns the code?
No. Conversion changes the format, not ownership. The company owns what employees and assigned contractors wrote, while third-party and customer-owned code keep their own terms. The conversion is a good moment to identify those boundaries and record them.
How should commits by departed engineers be mapped?
Map them to real names and a stable placeholder email, such as an address on an archive domain the company controls, rather than leaving bare usernames. Keep the mapping file with the conversion records. If personal details must later be removed for licensing, a consistent map makes pseudonymization straightforward.
Is Visual SourceSafe or CVS history worth the same effort?
The same test applies: convert only if someone needs the history or it may support a data license. Older systems often have weaker metadata and more corruption, so validate carefully. If the tools to read them are hard to run, a documented archive may be the realistic choice.
Who should own a conversion project?
A senior engineer who knows the old system should own the technical work, with the CTO deciding scope and IT confirming storage and the retirement date for the old server. Bring in legal only where ownership questions arise, such as contractor code or customer-specific branches.
Sources
- Gitleaks is an MIT-licensed tool for detecting secrets such as passwords, API keys and tokens in git repositories; on May 21, 2026 its README stated it is feature complete and future releases will be security patches only. Source
- TruffleHog is an AGPL-3.0 open-source secret scanner that can log in to confirm whether a secret it classifies is live, and scans sources including Git. Source
Related resources
See if your company qualifies
A short company assessment. No data uploads are needed.