Stash is the original name of Atlassian's self-hosted Git repository server. Atlassian renamed it Bitbucket Server in 2015, and later folded it into Bitbucket Data Center; the Server edition itself reached end of support in February 2024. So if you are looking for Stash training, you are almost certainly looking at one of two situations: an instance still running under the old name and the old version, or a team whose documentation, scripts and internal wiki still say Stash while the software underneath has moved on. This page is written for both, and it will not pretend Stash is a current product.
Underneath the naming, the model has been stable for a decade. Repositories live inside projects; permissions cascade from global to project to repository and are then narrowed by branch permissions; pull requests carry default reviewers and merge checks; and pre-receive and post-receive hooks enforce policy on the server rather than trusting client-side convention. The instance is a Java application with a home directory, an external database, a base URL behind a reverse proxy, and a licence tied to user tier — which is exactly the surface an administrator has to know to upgrade it.
What has changed is everything around it. Add-ons that worked on Stash 3.x may not exist for current Bitbucket. The supported upgrade path is a chain of version hops with database and Java requirements at each step, not a single jump. Application links to Jira, Bamboo, Fisheye and Crucible need re-establishing. And the destination is a real choice: stay self-hosted on Bitbucket Data Center, move to Bitbucket Cloud, or leave Atlassian for another Git host.
Why this skill matters now
An unsupported source control server is not a neutral risk. It is where every line of your source code lives, it authenticates against your directory, it holds credentials for your CI system, and it stops receiving security fixes the moment support ends. Bitbucket Server passed that point in February 2024, and Stash-era versions passed it many years earlier.
The reason these instances survive is rarely negligence. It is that the upgrade path is genuinely non-trivial — multiple version hops, database and Java changes, add-on compatibility gaps, application links to re-establish, and hooks or scripts written against an old API — and nobody has been given the time to do it properly. So the server sits there, patched around, until an audit finding or a hardware failure forces the issue.
The skill worth training is therefore narrow and practical: read the instance you have, plan a supported upgrade chain, rehearse it against a restored copy, decide honestly which repositories deserve migration and which should become a read-only archive, and know what a move to Bitbucket Cloud or another host does and does not carry with it. Done deliberately this is a scheduled project with a rollback. Done reactively it is an incident.