Brian posted in the SonarQube Cloud forum on 10 July 2025. The repos had already moved from Bitbucket to GitHub. SonarQube Cloud had not.
The Sonar organization was still bound to the Bitbucket workspace. Brian thought the only path was a new Sonar org. Colin from Sonar said that is not true, if you follow a few unintuitive steps.
This thread is not a git dump write-up. It is the leftover identity after the remotes change. If you are looking at the same route, start with the Bitbucket → GitHub playbook. Then inventory every org-bound tool, not just origin.
The remotes can move and the scanner stay behind
GitHub will import an external Git repo. That copies history. It does not rebind SonarQube Cloud.
SonarQube Cloud binds an organization to one DevOps platform. Once bound, you cannot point it at another org in the UI. The documented workaround is unbind, then rebind. It only applies if the current bind is GitHub or Bitbucket. You then rebind each project by hand.
Colin’s sequence on the thread matches that workaround. Log in with GitHub at least once. Log back in with Bitbucket. Add the GitHub user as a Sonar org admin. Uninstall the SonarQube Cloud app from the Bitbucket workspace. Log in with GitHub, install the app, bind the org. Refresh every project binding. Remove the Bitbucket users.
Brian did the steps. The GitHub bind did not stick when he came back to the page. Colin asked if he had clicked Save. The real miss was GitHub permission. Brian was not an owner on the GitHub org. Once that was fixed, the bind held.
A Bitbucket admin is not always a workspace owner
Aaron-fp hit the same path four days later. He stalled on uninstalling the Sonar app from Bitbucket. The workspace UI hid apps from him. He sat in an “admins” group. That was not enough. He used the original Bitbucket workspace owner account and removed the app from there.
The thread never names the company, the repo count, or the git tool they used. I am not filling those in. What it proves is the permission split. GitHub org owner to install Sonar. Bitbucket workspace owner to tear the old app out. A Sonar admin on the old login is not enough if those two seats are different people.
What I would copy
Write a list of org-bound tools before you flip remotes. Sonar, coverage, deploy keys, status checks, package registries. Brian only found the Sonar bind after the git move.
Do not create a second Sonar org to escape a Bitbucket bind. The official workaround keeps the existing org if you can unbind it.
Prove the GitHub owner and the Bitbucket workspace owner are in the room before you uninstall the app. Aaron needed the original owner. Brian needed GitHub owner, not just Save.
Rebind projects one by one and open a known PR. Decoration on the old Bitbucket URL is a leftover, not a success.
The Bitbucket → GitHub playbook is the repo checklist. Use Brian’s thread for the Sonar org that a git push --mirror will not mention.