dotkb

    Backup git repositories

    (updated: )

    Overview

    You can backup your git repositories by saving a bare copy of the repository:

    git clone --mirror [email protected]:username/repo.git
    

    Script

    This is a script that I often use to backup my git repositories. I’m using gh tool to get a list of all my repositories on GitHub. You can adjust it accordingly to match other git hosting services.

    Of course, as per the usual backup guidelines, it is ideal to archive, compress, and save the output file on cloud and offline storage.

    #!/bin/bash
    
    set -euo pipefail
    
    cd "$(mktemp -d)"
    mkdir repos
    cd repos
    
    gh repo list --source |
      awk '{print $1}' | sort |
      xargs -I{} git clone --mirror [email protected]:{}
    
    cd ..
    
    tar cf repos.tar repos
    zstd -T0 --ultra -20 repos.tar
    du -sh repos.tar repos.tar.zst
    mv -vf repos.tar.zst "${HOME}/repos-$(date +%Y%m%d).tar.zst"
    

    You can find the most up to date version of this script here.

    Sources

    https://docs.github.com/en/repositories/archiving-a-github-repository/backing-up-a-repository
    https://stackoverflow.com/questions/3959924/whats-the-difference-between-git-clone-mirror-and-git-clone-bare
    https://stackoverflow.com/questions/6150188/how-to-update-a-git-clone-mirror