TimWitzdam/GitSave

GitSave is a self-hosted and open-source application that backs up your Git repositories.

TypeScript

318

20 commits

updated Sep 26, 2026

See the code

See what people are saying

SourceMessageScoreDate

Revive of GitSave (r/selfhosted)

About half a year ago I archived my project [GitSave](https://github.com/TimWitzdam/GitSave) due to time constraints. GitHub has been so unreliable the past few months. Also a specific company taking down \~400 repos from GitHub lead to the decision a few days ago to unarchive and revive the…

6

Sep 26, 2026

README

GitSave Logo

GitSave

Easily back up your Git repositories on a schedule.


GitSave 3 pages animation

https://github.com/user-attachments/assets/301b28ca-6b72-490a-8efb-217e39fb73d3

Git happens...

So be prepared and keep backups of your own and favourite Git repositories.

🛠️ Features

  • Easy to use and responsive web interface
  • Automated install using Docker
  • Scheduling of backups
  • Select amount of backups you want to keep
  • Support for GitHub, GitLab and other Git platforms
  • Support for own authentication provider
  • Pause/resume schedules
  • View backup history
  • Support for backing up to a SMB share

🚀 Deploy GitSave for yourself

[!WARNING] Make sure to change the env variables "JWT_SECRET" and "ENCRYPTION_SECRET" to something secure. Clone this repository and run npm run secrets (works on Windows, macOS and Linux) to generate a ready-to-use pair of secrets. The ENCRYPTION_SECRET must be 32 characters long.

Single run command

docker run -d --restart=always -p 3000:3000 -v gitsave:/app/data -v ./backups:/app/backups -e JWT_SECRET={YOUR_SECRET_HERE} -e ENCRYPTION_SECRET={YOUR_SECRET_HERE_32_CHARACTERS} -e DISABLE_AUTH=false --name GitSave timwitzdam/gitsave:latest

Docker compose

  1. Create .env file
# Generate a JWT_SECRET and a 32 character ENCRYPTION_SECRET: npm run secrets
JWT_SECRET="REPLACE_THIS"
DISABLE_AUTH=false
ENCRYPTION_SECRET="REPLACE_THIS_WITH_32_CHARACTERS_SECRET"
  1. Create docker-compose.yml file
services:
  gitsave:
    image: timwitzdam/gitsave:latest
    container_name: GitSave
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - gitsave:/app/data
      - ./backups:/app/backups
    environment:
      - JWT_SECRET=${JWT_SECRET:?error}
      - DISABLE_AUTH=${DISABLE_AUTH:?error}
      - ENCRYPTION_SECRET=${ENCRYPTION_SECRET:?error}

volumes:
  gitsave:

👀 Any questions, suggestions or problems?

You're welcome to contribute to GitSave or open an issue if you have any suggestions or find any problems.

I'm also available via mail: contact@witzdam.com

backup-tool
git
github
gitlab
self-hosted

Contributors

TimWitzdam

19 commits

TimWitzdam/GitSave

GitSave is a self-hosted and open-source application that backs up your Git repositories.

TypeScript

318

20 commits

updated Sep 26, 2026

See the code

See what people are saying

SourceMessageScoreDate

Revive of GitSave (r/selfhosted)

About half a year ago I archived my project [GitSave](https://github.com/TimWitzdam/GitSave) due to time constraints. GitHub has been so unreliable the past few months. Also a specific company taking down \~400 repos from GitHub lead to the decision a few days ago to unarchive and revive the…

6

Sep 26, 2026

README

GitSave Logo

GitSave

Easily back up your Git repositories on a schedule.


GitSave 3 pages animation

https://github.com/user-attachments/assets/301b28ca-6b72-490a-8efb-217e39fb73d3

Git happens...

So be prepared and keep backups of your own and favourite Git repositories.

🛠️ Features

  • Easy to use and responsive web interface
  • Automated install using Docker
  • Scheduling of backups
  • Select amount of backups you want to keep
  • Support for GitHub, GitLab and other Git platforms
  • Support for own authentication provider
  • Pause/resume schedules
  • View backup history
  • Support for backing up to a SMB share

🚀 Deploy GitSave for yourself

[!WARNING] Make sure to change the env variables "JWT_SECRET" and "ENCRYPTION_SECRET" to something secure. Clone this repository and run npm run secrets (works on Windows, macOS and Linux) to generate a ready-to-use pair of secrets. The ENCRYPTION_SECRET must be 32 characters long.

Single run command

docker run -d --restart=always -p 3000:3000 -v gitsave:/app/data -v ./backups:/app/backups -e JWT_SECRET={YOUR_SECRET_HERE} -e ENCRYPTION_SECRET={YOUR_SECRET_HERE_32_CHARACTERS} -e DISABLE_AUTH=false --name GitSave timwitzdam/gitsave:latest

Docker compose

  1. Create .env file
# Generate a JWT_SECRET and a 32 character ENCRYPTION_SECRET: npm run secrets
JWT_SECRET="REPLACE_THIS"
DISABLE_AUTH=false
ENCRYPTION_SECRET="REPLACE_THIS_WITH_32_CHARACTERS_SECRET"
  1. Create docker-compose.yml file
services:
  gitsave:
    image: timwitzdam/gitsave:latest
    container_name: GitSave
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - gitsave:/app/data
      - ./backups:/app/backups
    environment:
      - JWT_SECRET=${JWT_SECRET:?error}
      - DISABLE_AUTH=${DISABLE_AUTH:?error}
      - ENCRYPTION_SECRET=${ENCRYPTION_SECRET:?error}

volumes:
  gitsave:

👀 Any questions, suggestions or problems?

You're welcome to contribute to GitSave or open an issue if you have any suggestions or find any problems.

I'm also available via mail: contact@witzdam.com

backup-tool
git
github
gitlab
self-hosted

Contributors

TimWitzdam

19 commits

Languages

TypeScript

94.5%

Astro

4.5%