Transferring a GitHub repository takes about two clicks, and those clicks are rarely the problem. I went through 80 public reports of repository transfers going wrong, from Vercel's and Netlify's forums, GitHub, Railway, Reddit and Stack Overflow. The transfer itself failed in only 12 of them. The rest broke afterwards: hosting that quietly stopped deploying (22), a GitHub Pages site or custom domain that went down (15), and people locked out of accounts the old developer still controlled (12).
Every guide ranking for this search shows you GitHub's Transfer button and stops there. This one covers the button, and then everything connected to the repository that the button doesn't move.
It's also how I think about code in general. At The AI Lab, the code I work on, including the Trust Identity Protocol, lives in a GitHub organization, not in anyone's personal account. People join and leave; the code stays with the business. If your app's code sits in a developer's or agency's account, this is how to bring it home.
What actually breaks when you transfer a repository

The transfer itself failed in only 12 of 80 reports. Most broke afterwards, in what was connected to the repository.
Two things stood out. Hosting providers sometimes keep showing "Connected" while pointing at a repository that no longer exists at that address, so nothing looks wrong until you push a change and the live site doesn't update. And for small businesses, the code was rarely the hostage. Eleven reports were custom domains still sitting in an old Vercel or Netlify account, ten of them a former developer's or agency's. Only three were a developer refusing to hand the code over.
How to transfer GitHub repo ownership, step by step
Before you start, check three things:
- The person transferring has admin access to the repository. Collaborators with write access can't do it.
- The new owner has no repository with the same name, or a fork in the same network. If it does, rename one first.
- For an organization, you're allowed to create repositories there, and the source organization allows transfers out. Owners can restrict both.
- Open the repository on GitHub and click Settings.
- Scroll to the Danger Zone and click Transfer.
- Choose an organization, or type the username of the new owner.
- Type the repository name to confirm, then click "I understand, transfer this repository".
- If the new owner is a personal account, they get an email and must accept it within one day, or the invitation expires.
GitHub's transfer docs say old web links and git addresses redirect to the new location, so nothing breaks immediately. The redirect disappears if anyone later creates a repository with the old name, so update your local copy anyway with git remote set-url origin and the new address. The original owner is added as a collaborator afterwards; remove them when you're ready.
| Moves with the repository | Stays behind or needs redoing |
|---|---|
| Commit history, issues, pull requests, wiki, stars | Hosting links (Vercel, Netlify, Cloudflare and others) |
| Repository secrets, webhooks and deploy keys | Organization-level secrets, variables and runners |
| Large files stored with Git LFS | Container images and project boards |
| Redirects from the old address | GitHub Pages address (not redirected) |
One more trap: a private repository moved to a GitHub Free account loses its protected branches, wiki and GitHub Pages, because those are paid features for private repositories. If the site is published with GitHub Pages, it goes offline.
Relink your hosting, or your site stops updating
This was the biggest group in the reports. Vercel, Netlify, Cloudflare, Render, Railway and AWS Amplify all connect to GitHub through an app installed on one GitHub account. After a transfer, that app has to be installed on the new owner, and the hosting project pointed at the repository's new address:
| Host | What to do after the transfer |
|---|---|
| Vercel | Settings, Git: disconnect, then connect the repository at its new address |
| Netlify | Continuous deployment, Repository, Manage repository: link the repository again |
| Cloudflare Pages | Cannot relink: transfer it back, or create a new Pages project |
| Cloudflare Workers | Disconnect builds, then connect the repository again |
| Render, Railway, Amplify | Install their GitHub app on the new owner, then reconnect |
Vercel has two traps worth knowing. On the free Hobby plan, private repositories owned by a GitHub organization can't deploy at all, so moving a client's private repository into their new organization stops their deploys until they upgrade or keep it in a personal account. And Hobby only deploys commits authored by the owner of the Vercel account, according to Vercel's Git docs. Netlify has its own: the repository link belongs to the person who created it, so when the departing developer loses access, builds can stop, and the fix is to relink the same repository from your side.
Moving the hosting project itself is a separate step from moving the code. On Vercel, a project transfer carries its deployments, domains and environment variables, but not integrations such as a database, and it needs a team that both people belong to. On Netlify, if you and the developer don't share a team, the site transfer goes through support.
However it's hosted, I'd do it in this order: transfer the repository, reconnect the hosting, deploy once from the new repository, and compare the live site page by page with what visitors saw before. Only then remove the old access.
The domain is the part that gets stuck
In the reports, the domain was the most common thing still sitting in a former developer's account. Code can be transferred in two clicks; a domain registered or connected in someone else's account needs their cooperation, so sort it out while you're still on good terms.
- Registrar: the domain should be registered in an account in your name, with your email on it.
- Vercel: if your project only uses a subdomain, the root domain stays with the original Vercel team, which keeps paying for it if it was bought there.
- GitHub Pages: if the developer verified your domain on their account, only their repositories can publish to it. Verify it on your own account, which also releases it if GitHub says the domain is already in use. A domain left pointing at GitHub Pages after the site is removed can be taken over by someone else, which is exactly the state a transfer to a free account can leave you in.
The same goes for every account around the code: hosting, email sending, payments, analytics and the database. Twelve reports were people locked out of one of these after the developer left. Make a list, and move each one into your name before you say goodbye.
For developers: what else changes after a transfer
- Secrets you can't read back. Organization-level Actions secrets and variables stay with the old organization, and GitHub never shows secret values again, so collect the real values from wherever the developer keeps them before the move.
- Cloud deploys through OIDC. Workflows that log in to AWS, Azure or Google Cloud are trusted by a subject that names the owner and repository. Since July 15, 2026, a repository transferred or renamed switches to a new subject format that includes IDs, so update the trust policies on the cloud side, per GitHub's OIDC reference.
- A fresh organization is locked down. New organizations block OAuth-based tools until an owner approves them, and don't allow new deploy keys by default. The receiving organization's Actions policy applies immediately too, and it can block common actions.
- Things that point at the old owner. Reusable workflows or actions in the agency's private repositories, CODEOWNERS teams, container images on ghcr.io, and submodule URLs. Package publishing breaks too: npm and PyPI trusted publishing check the owner and repository name.
When you cannot get a transfer
If the developer won't transfer the repository but will give you read access, you can still get a full copy with its history. GitHub documents it as mirroring: create an empty repository in your account, clone the old one with git clone --bare, then push it with git push --mirror to yours. The copy has every commit and branch; it just isn't linked to the original.
If they won't give you any access, who owns the code comes down to your contract, and that's a question for a lawyer, not for me. The cheaper fix is prevention: create the GitHub organization yourself at the start, give it at least two owners as GitHub recommends, and invite developers to it. The same goes for apps built with AI tools; I covered that version in how to export a Lovable project to GitHub.
The order that keeps your site running
- Create your GitHub organization or account, and accounts for hosting and the domain.
- Collect secret values and a list of every connected service while the developer is still around.
- Transfer the repository, and accept it within one day.
- Install the hosting app on the new owner and reconnect the project.
- Move the domain and the other accounts into your name.
- Deploy once from the new repository and check the live site page by page.
- Only then remove the old developer's access.
More guides on taking control of an app are in Fix an AI-built app. And if you'd rather hand it over, I take these on as client projects: send me where things live today.
Common questions
How do I transfer ownership of a GitHub repository?
You need admin access to the repository. Open its Settings, go to Danger Zone, click Transfer, choose an organization or type a username, then type the repository name to confirm. A transfer to a personal account sends the new owner an email that expires if it is not accepted within one day.
Do commit history and issues move when I transfer a repo?
Yes. Commit history, issues, pull requests, the wiki, stars and watchers move with the repository, and so do its webhooks, repository secrets and deploy keys. Organization-level secrets, runners and project boards stay with the old owner.
Do old GitHub links still work after a transfer?
Yes. Web links and git clone, fetch and push to the old address redirect to the new one, though GitHub still recommends updating your remote with git remote set-url. The redirect stops working if someone later creates a repository with the old name, and GitHub Pages addresses are not redirected.
Will my Vercel or Netlify site keep deploying after I transfer the repo?
Not reliably. Both deploy through a GitHub app installed on one account, so install it on the new owner and reconnect the project to the repository at its new address. On Vercel's free Hobby plan, private repositories owned by an organization cannot deploy at all.
Can I transfer a GitHub repo to an organization?
Yes, if you are allowed to create repositories in that organization. Transfers out of an organization also need permission there, and organization owners can restrict transfers to owners only. Once it arrives, the organization's own rules, Actions policy and default permissions apply.
What if my developer will not transfer the repository?
If they will give you read access, you can make a full copy with its history in your own account by cloning it with --bare and pushing it with --mirror. If they will not give any access, it comes down to your contract, which is a question for a lawyer.
Do GitHub Actions secrets transfer with the repository?
Repository-level secrets do. Organization-level secrets and variables belong to the old organization and stay there, and secret values can never be read back from GitHub, so get the real values from your developer before the move if you need to recreate them.
This post first appeared on tusharbhendarkar.com. I fix apps built with Lovable, Replit, Bolt and Base44, and I build free checkers for live apps. If something here is broken for you, email me at tusharbhendarkar44@gmail.com.
Top comments (0)