How I use Git

I host a few git repositories on my own personal gitea instance. The ones I use the most are...

  • bin, for my scripts (including my .bash_profile script
  • cfg, for my configuration files
  • Notes, or my Obsidian notes
  • Orchestration, for my container and virtual machine solutions

There are also a few projects that I build myself...

  • neovim
  • multibg-wayland

Anyway, there's lots more repositories and not all of them are required on all of my machines. While i'm working on a machine i'll make changes in oneor many repositories, so before I shut that machine down i need to git add, git commit and git push.

How This Script Helps

In my .bash_profile script i set the environment variable REPO_CFG to point to my repo.yaml file (which is in my cfg repository by the way). I also add this jdownie/repo folder to my PATH. There is an example of a repo.yaml in this folder. For each repository, there's a code, a url and a local path to clone the repository into. There's also a list of hostnames that the repository is wanted on (which can be an empty list if the repository is wanted on all hosts; like bin and cfg for example).

With all of that in place, i can run the following commands across all of my repositories...

  • repo status, list each repo with a count of "dirty" files against each
  • repo lc, stage and commit all files in each repo with a generic comment
  • repo fetch, repo pull and repo push
  • repo sync, pulls and pushes all repositories

This script makes it easy for me to run repo lc and repo sync before i shut a machine down. On my next machine I can run repo sync to get my changes on the new machine.

If I want to remove a repo from a host. I can remove the hostname from that repositorie's hosts list. Then i run repo prune which does a lc, a sync and then removes the cloned folder.

Alternatively, i might move a repository. I change the url in repo.yaml, and then run repo align to update that repository's remote url.