Git-Worktrees-01

Hopefully if you write code you are using git, if not go learn the basics of , , , and / like... right now.

Copy this post

Git #

Hopefully if you write code you are using git, if not go learn the basics of commit, pull, push, and pull request/merge request like… right now.

Assuming you are at least familiar with git then you probably work the same way I have since I’ve been using it.

  1. clone or initialize a repo
  2. checkout a branch, git checkout -b my-feature
  3. work on my-feature and when ready open a PR into main
  4. git pull main then git checkout -b another-feature
  5. etc…

What if you need to switch between branches for some reason? Often I’m jumping into projects with my co-workers left and right, and I’ll have changes that I’m either working on or exploring for them. When it’s time to switch branches I think there’s more elegant ways than this but I’ve always done this:

  1. stash the current changes
  2. checkout out the relevant branch
  3. helped out
  4. re-checkout my original branch
  5. pop the stash

Now, that’s not awful but I think worktrees will make this nicer for a few reasons!

Worktrees #

Worktrees are linked branches that have their own directories somewhere on your computer. To checkout a branch you don’t have to worry about stashing any changes, you just cd into the directory of that branch.

The branch can be literally anywhere - it doesn’t have to be in the repo folder

Use Case #

I’ve seen ThePrimeagean argue for worktrees for several reasons, see a YT video here

I’m entirely in Python at the moment, or working with projects that dont’ have that kind of requirement (ie. this website). My reason for wanting worktrees is 3 fold.

Files that could have been gitignored but ain’t #

I have a .envrc I put in every project, but it’s not gitignored for reasons that aren’t relevant right now… If I switch branches I’ll stash everything I have at the time, including my .envrc, but then if I forget to pop the stash and I move on and come back then my environment isn’t active and I have to go find the stash, pop it, cd out, and then back in and honestly…. that sucks. Worktrees will let me have the .envrc in every branch, and if I checkout or switch to a new one, my personal branch is unaffected.

In my team’s Kedro workflow we keep a specific directory, the conf directory at a different spot than the Kedro team has in their templates (the why is outside the scope here). The way I preserve every kedro utility for my own benefit is to symlink our conf to where the Kedro template expects it to be. But then everytime I stash changes I lose that symlink so I either just don’t have it for the time being or I recreate it which is a hassle Worktrees will let me have that present and persistent on all my branches at once.

Foo #

Because why not!? This workflow feels future-proof, and if my toolset changes down the line then having this worktree centric workflow might be helpful and I’m just prepping for that possibility!

Connections

Related tags and posts connected to this entry.