Create a matrix of Source <-> Target Git repo Mirroring #64

Closed
opened 2026-10-05 01:39:02 +02:00 by adam · 6 comments
Owner

It would be helpful if you could configure multiple git servers, and the mirroring action of each.
So something like this:

Source Target Source Instance Target Instance Mirror Type
Github Gitea https://github.com https://my-gitea-instance.internal => (Source to Target)
Github Gitlab https://github.com https://gitlab.com <=> (Two Way Mirror)
Gitea Gitea https://my-gitea-instance.internal https://localhost:3000 => (Source to Target)
Gitlab Gitea https:gitlab.com https://localhost:3000 => (Source to Target)

This would be helpful as there are many git servers (public, company, self hosted, internal), and people may want to have repos mirrored in certain ways depending on the source and target servers.

This would also solve issues:
#16
#26
#34 .

This would allow greater flexibility of how repos are mirrored, which is goof for people not just wanting github->gitea mirroring.

It would be helpful if you could configure multiple git servers, and the mirroring action of each. So something like this: | Source | Target | Source Instance | Target Instance | Mirror Type | |--------|--------|------------------------------------|------------------------------------|-----------------------| | Github | Gitea | https://github.com | https://my-gitea-instance.internal | => (Source to Target) | | Github | Gitlab | https://github.com | https://gitlab.com | <=> (Two Way Mirror) | | Gitea | Gitea | https://my-gitea-instance.internal | https://localhost:3000 | => (Source to Target) | | Gitlab | Gitea | https:gitlab.com | https://localhost:3000 | => (Source to Target) | This would be helpful as there are many git servers (public, company, self hosted, internal), and people may want to have repos mirrored in certain ways depending on the source and target servers. This would also solve issues: #16 #26 #34 . This would allow greater flexibility of how repos are mirrored, which is goof for people not just wanting github->gitea mirroring. <!-- github-sync-id:3551269938 -->
adam closed this issue 2026-10-05 01:39:02 +02:00
Author
Owner

Hi @micah686 I understand this requirement but this would required a significant amount of time building and testing each of them and since this is a free and open source project with no sponsorship I am currently blocked for next few months. I am happy to add community tested PR's on this. And I can also help out reviewing and testing things on the weekends.
And personally I built this cause I just wanted a backup of my GitHub repos so adding these features don't really serve any personal reason. Hence I think a community PR on these issues would be the right call. I can help with reviewing and testing them on my free weekends.

Hi @micah686 I understand this requirement but this would required a significant amount of time building and testing each of them and since this is a free and open source project with no sponsorship I am currently blocked for next few months. I am happy to add community tested PR's on this. And I can also help out reviewing and testing things on the weekends. And personally I built this cause I just wanted a backup of my GitHub repos so adding these features don't really serve any personal reason. Hence I think a community PR on these issues would be the right call. I can help with reviewing and testing them on my free weekends. <!-- github-comment-id:3445439536 -->
Author
Owner

Yeah, I understand your position. I just thought this would be a good feature to work toward (long term wise).
I had written a simple C# console app to do something similar to what you did, but your solution is a lot more in depth than mine ever was.
If I could help out, I would, but I don't know typescript well enough.
I just noticed there were other issues asking for mirroring from/to different git servers, and I figured it would be better to slowly work on a solution that's expandable for mirroring to/from different git servers.

The project looks really nice so far, and I'm interested to see how it improves.

Yeah, I understand your position. I just thought this would be a good feature to work toward (long term wise). I had written a simple C# console app to do something similar to what you did, but your solution is a lot more in depth than mine ever was. If I could help out, I would, but I don't know typescript well enough. I just noticed there were other issues asking for mirroring from/to different git servers, and I figured it would be better to slowly work on a solution that's expandable for mirroring to/from different git servers. The project looks really nice so far, and I'm interested to see how it improves. <!-- github-comment-id:3445457063 -->
Author
Owner

@micah686 Yea I think long term wise I def see that this can be a good roadmap and overtime with enough interest from community and using my weekends maybe we will get there with all these options sometime next year.

@micah686 Yea I think long term wise I def see that this can be a good roadmap and overtime with enough interest from community and using my weekends maybe we will get there with all these options sometime next year. <!-- github-comment-id:3445561768 -->
Author
Owner

Making this the umbrella issue for the multi source, multi destination work.

Where things stand:

  • Sources: the next release (PR #376) adds GitLab (beta), Gitea and Forgejo as sources, one source per gitea-mirror account for now.
  • Destinations: Gitea and Forgejo. Pushing to GitHub or GitLab needs a push engine, which is scoped in #377.
  • The scaffolding from #368 lives on the feature/matrix branch. Matrix PRs should target that branch.
  • Mirroring stays one way. Two way sync will not be supported, this is a backup tool at its core and bidirectional sync has too many edge cases.

Folding #26, #34 and #221 into this issue so the discussion is in one place.

Making this the umbrella issue for the multi source, multi destination work. Where things stand: - Sources: the next release (PR #376) adds GitLab (beta), Gitea and Forgejo as sources, one source per gitea-mirror account for now. - Destinations: Gitea and Forgejo. Pushing to GitHub or GitLab needs a push engine, which is scoped in #377. - The scaffolding from #368 lives on the feature/matrix branch. Matrix PRs should target that branch. - Mirroring stays one way. Two way sync will not be supported, this is a backup tool at its core and bidirectional sync has too many edge cases. Folding #26, #34 and #221 into this issue so the discussion is in one place. <!-- github-comment-id:5506860833 -->
Author
Owner

Closing this. Where it ended up:

  • One way mirroring from several kinds of sources shipped in v3.30.0: GitHub, GitLab (beta), Gitea and Forgejo as sources, Gitea or Forgejo as the destination.
  • Pushing to GitHub or GitLab as a destination is tracked in #377, and that is the only piece of the matrix still open. The scaffolding from #368 stays on the feature/matrix branch for it.
  • Two way mirroring will not be supported. It brings too many edge cases and unknowns for a tool whose job is to be a reliable backup, so the mirror stays one way.

Thanks for the write up and for the groundwork in #368.

Closing this. Where it ended up: - One way mirroring from several kinds of sources shipped in v3.30.0: GitHub, GitLab (beta), Gitea and Forgejo as sources, Gitea or Forgejo as the destination. - Pushing to GitHub or GitLab as a destination is tracked in #377, and that is the only piece of the matrix still open. The scaffolding from #368 stays on the feature/matrix branch for it. - Two way mirroring will not be supported. It brings too many edge cases and unknowns for a tool whose job is to be a reliable backup, so the mirror stays one way. Thanks for the write up and for the groundwork in #368. <!-- github-comment-id:5507861397 -->
Author
Owner

@micah686 Please try out the new matrix feature and thnaks for your contribution

@micah686 Please try out the new matrix feature and thnaks for your contribution <!-- github-comment-id:5515239728 -->
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: adam/gitea-mirror#64