Go application that clones or pulls all accessible repositories from various forges
Find a file
2026-01-20 14:36:45 +00:00
.github chore(package): update actions/checkout action to v6 2026-01-20 14:36:45 +00:00
cmd/gogitlabber feat: bump version to v3.0.2 2026-01-20 15:23:39 +01:00
.gitignore feat: added .ansible to gitignore 2025-06-02 18:38:37 +02:00
.gitlab-ci.yml chore(package): update dependency components/golang to v2.0.6 2025-10-12 08:56:14 +00:00
.goreleaser.yaml ci(release): improve release name 2025-04-04 11:39:09 +02:00
go.mod chore(package): update module github.com/go-git/go-git/v6 to v6.0.0-20260114124804-a8db3a6585a6 2026-01-14 13:36:50 +00:00
go.sum chore(package): update module github.com/go-git/go-git/v6 to v6.0.0-20260114124804-a8db3a6585a6 2026-01-14 13:36:50 +00:00
LICENSE feat: added licence 2025-02-27 10:47:55 +00:00
readme.md feat: added git user and mail config 2025-07-07 11:48:50 +02:00
renovate.json feat: added renovate config 2025-02-27 11:50:02 +01:00

GoGitlabber

This project is inspired from the python application called gitlabber (https://github.com/ezbz/gitlabber). It is mainly to learn Golang. But also to make something that specifically solves my problem. 😆

It is definitely not as feature-rich as the original project... 😬

The program can clone and pull all repositories you have access to on a selfhosted or SaaS provided Gitlab or Gitea server. It only supports the HTTP access method.

It will pull the repositories in a tree like structure same as on Gitlab or Gitea.

root [http://gitlab.example.com]
├── group1 [/group1]
│   └── subgroup1 [/group1/subgroup1]
│       └── project1 [/group1/subgroup1/project1]
└── group2 [/group2]
    ├── subgroup1 [/group2/subgroup1]
    │   └── project2 [/group2/subgroup1/project2]
    ├── subgroup2 [/group2/subgroup2]
    └── subgroup3 [/group2/subgroup3]

Config file

GitLab:

# ~/.config/gogitlabber/gitlab.example.com.yaml
concurrency: 15
debug: false
destination: "$HOME/Documents"
git_backend: "gitlab"
git_host: "gitlab.example.com"
git_token: "glpat-"
git_user_mail: "john.doe@example.com"
git_user_name: "John Doe"
include_archived: "excluded"

Usage

gogitlabber -config=~/.config/gogitlabber/gitlab.example.com.yaml

Access Token Permissions

Gitea

Make sure the Gitea Access Token has at least the following permissions:

  • user - read
  • repository - read

Gitlab

Make sure the Gitlab Access Token has the api scope.