# Moving house: GitHub ➡️ Codeberg

**URL:** <https://forum.tsuki.games/t/moving-house-github-codeberg/306>\
**Category:** General\
**Tags:** guide, git\
**Created:** [April 24, 2025, 10:49pm UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306 "2025-04-24T22:49:49Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![outfrost](https://tsuki.b-cdn.net/user_avatar/forum.tsuki.games/outfrost/32/83_2.png) [@outfrost](https://forum.tsuki.games/u/outfrost)\
**Post date:** [April 24, 2025, 10:49pm UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306/1 "2025-04-24T22:49:49Z")

</div>

I decided to move some of my repositories from GitHub to [Codeberg](https://codeberg.org/outfrost) and [my personal server](https://git.outfrost.name). At first, I focused on ones where I feel there’s still a chance I’ll continue working on them.

Codeberg’s [terms of use](https://codeberg.org/codeberg/org/src/TermsOfUse.md#2-allowed-content-usage) only allow FOSS repositories (with a few minor exceptions). Luckily, that perfectly matches my intentions: to host public, open source projects on Codeberg, and private, closed source or license-pending ones on my own Forgejo instance or [git.tsuki.games](https://git.tsuki.games).

Migrating repositories over is much easier than I initially anticipated. It’s basically a one-click operation to import a GitHub repo into Forgejo, with all the GitHub metadata (issues, PRs, releases, wiki, etc.), and Codeberg of course also runs Forgejo.

 ![Screenshot of the Codeberg form for migrating a repo from GitHub](https://tsuki-s3.b-cdn.net/original/1X/19797205d9ad298e87b864640a6677163d19750b.png)

All I had to do was generate a [GitHub personal access token](https://github.com/settings/personal-access-tokens), then pass that over to the target instance along with the HTTPS clone URL of the source repo. It’s a good idea to save the token somewhere for reuse, as Forgejo asks for it each time you start a repo migration.

The smallest projects were copied in 1-2 seconds, the largest one - [Pillars of Anguish](https://outfrost.itch.io/pillars-of-anguish) - took under half a minute. I don’t normally trust such one-click processes to do things correctly, so I erred on the manual side when I was moving [Re:Placement](https://outfrost.itch.io/replacement) to my private forge. But now I see that using the automation would’ve saved me a lot of hassle in copying all the issues (which is basically our todo list). I would’ve only had to reassign team members to issues, and issues to kanban boards, which I did anyway.

My active projects will live primarily on Codeberg, my forge, and git.tsuki.games from now on. However, I still want people to be able to file issues and submit PRs on GitHub, to keep friction low - particularly for the Godot community, which for the time being is centred around GitHub. And there’s actually an easy solution.

 ![Screenshot of the mirror settings for a repository on Codeberg](https://tsuki-s3.b-cdn.net/original/1X/c84d75f2ee6f717135a657dbdfc0a771cea6126a.png)

I paste the SSH URL of the GitHub mirror into the Forgejo repo settings, tell it to use SSH authentication, sync on push, and disable periodic sync. Then I copy the SSH public key into my GitHub account, and it’s good to go. If pull requests appear on GitHub, I can merge them locally, push to Codeberg, and have them synced back to GitHub (tho I may need to close the PRs manually - oh well).

---

<div class="post-metadata">

**Author:** ![MyriadMinds](https://tsuki.b-cdn.net/user_avatar/forum.tsuki.games/myriadminds/32/109_2.png) [@MyriadMinds](https://forum.tsuki.games/u/MyriadMinds)\
**Post date:** [April 25, 2025, 3:00am UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306/2 "2025-04-25T03:00:26Z")

</div>

For those interested: forgejo also has a pretty convenient mirroring functionality which allows you to replicate your repo on a bunch of providers like github, gitlab, bitbucket, other forgejo instances, etc. This means you can develop on a local instance and have any changes automatically uploaded to somewhere else for viewing/backup.

---

<div class="post-metadata">

**Author:** ![outfrost](https://tsuki.b-cdn.net/user_avatar/forum.tsuki.games/outfrost/32/83_2.png) [@outfrost](https://forum.tsuki.games/u/outfrost)\
**Post date:** [April 25, 2025, 3:21am UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306/3 "2025-04-25T03:21:58Z")

</div>

Do you mean the one I mention in the last portion of my post, or a different one? (Sorry if the post is a bit rambly 😅)

---

<div class="post-metadata">

**Author:** ![MyriadMinds](https://tsuki.b-cdn.net/user_avatar/forum.tsuki.games/myriadminds/32/109_2.png) [@MyriadMinds](https://forum.tsuki.games/u/MyriadMinds)\
**Post date:** [April 25, 2025, 12:22pm UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306/4 "2025-04-25T12:22:27Z")

</div>

OH, you’re right, silly me 🥴 My excuse is that my eyes started just skimming the post once you got into the technical details, since i also used those processes before 🤭

---

<div class="post-metadata">

**Author:** ![exodrifter](https://tsuki.b-cdn.net/user_avatar/forum.tsuki.games/exodrifter/32/3_2.png) [@exodrifter](https://forum.tsuki.games/u/exodrifter)\
**Post date:** [May 11, 2025, 8:25pm UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306/5 "2025-05-11T20:25:05Z")

</div>

Migrating is generally pretty straightforward, but I did run into a few problems migrating from a self-hosted gitea because it was hosted behind nginx and there were some nginx configuration issues that prevented the migration from completing successfully that I ran info, like connection time limits.

---

<div class="post-metadata">

**Author:** ![system](https://tsuki.b-cdn.net/user_avatar/forum.tsuki.games/system/32/457_2.png) [@system](https://forum.tsuki.games/u/system)\
**Post date:** [May 6, 2026, 8:26pm UTC](https://forum.tsuki.games/t/moving-house-github-codeberg/306/6 "2026-05-06T20:26:00Z")

</div>

This topic was automatically closed 360 days after the last reply. New replies are no longer allowed.
