logo
GICKUP

Backup your Git repositories with ease.

Website • GitHub • Docs

Build and Publish

## What is GICKUP? Gickup is a tool that allows you to clone/mirror repositories from one host to another. This is useful if you want to have a backup of your repositories on another host or on a local server. ### Supported Source and Destinations You can clone/mirror repositories from: - Github - Gitlab - Codeberg (Forgejo) - Gitea - Gogs - Bitbucket - OneDev - Sourcehut - Opengist - Any You can clone/mirror repositories to: - Github - Gitlab - Codeberg (Forgejo) - Gitea - Gogs - OneDev - Sourcehut - Radicle - Local - S3 If your hoster is not listed, feel free to open an issue and I will add it. ## How to make a configuration file [Here is an example](https://github.com/cooperspencer/gickup/blob/main/conf.example.yml) ## How to run the binary version `./gickup path-to-conf.yml` ## Start with the web interface ```bash ./gickup --webui :8080 /path/to/conf.yml ``` Open http://localhost:8080. If the file is missing or empty, the interface opens configuration setup. Paste your YAML and save; Gickup creates the file and its parent directory, then loads it within about five seconds. Without a cron schedule, loading a configuration starts a backup. With a schedule, backups wait for that schedule. The configuration path defaults to `conf.yml` in the working directory. Pass the listen address directly to `--webui`, for example `--webui :8080` or `--webui 127.0.0.1:9090`. When `--webui` is supplied, this address takes precedence over `webui.addr` in YAML. Without the flag, the existing YAML setting still works. The interface has no authentication; restrict access to trusted users. For Docker, mount a **directory** so the interface can create the configuration file: ```yaml services: gickup: build: . command: ["--webui", ":8080", "/config/conf.yml"] ports: - "127.0.0.1:8080:8080" volumes: - ./config:/config - ./backups:/backups ``` Run `mkdir -p config backups` and `docker compose up --build`, then open http://localhost:8080. The saved configuration persists in `./config/conf.yml`. Use `/backups` as the local destination path to persist backups on the host. ## How to run the Docker image ```bash mkdir gickup wget https://raw.githubusercontent.com/cooperspencer/gickup/main/docker-compose.yml nano conf.yml # Make your config here docker-compose up ``` ## Compile the binary version `go build .` ## Compile the Docker Image ```bash git clone https://github.com/cooperspencer/gickup.git cd gickup nano docker-compose.yml # Uncomment the Build nano conf.yml # Make your config here docker-compose build docker-compose up ``` ## Questions? If anything is unclear or you have a great idea for the project, feel free to open a discussion about it. https://github.com/cooperspencer/gickup/discussions ## Distribution Packages |Distribution|Package|Maintainer| |---|---|---| |Arch|[gickup](https://aur.archlinux.org/packages/gickup/)|[me](https://github.com/cooperspencer)| |Homebrew|[gickup](https://formulae.brew.sh/formula/gickup#default)|| |Fedora|[gickup](https://copr.fedorainfracloud.org/coprs/frostyx/gickup/)|[FrostyX](https://github.com/FrostyX)| |Scoop|[gickup](https://scoop.sh/#/apps?q=gickup&id=493e856707843828b4491004edfb6ddedc4bd1e1)|| |Winget|[gickup](https://github.com/microsoft/winget-pkgs/tree/master/manifests/c/cooperspencer/gickup)|| ## Issues The mirroring to Gitlab doesn't work, or at least I can't test it properly because I have no access to a Gitlab EE instance. ## Future Ideas - Additional VCS - [GitBucket](https://gitbucket.github.io/) - Add minio as a destination