CodingBlocks
Git from the Bottom Up – The Index
This episode, we learn more about Git’s Index and compare it to other version control systems while Joe is throwing shade, Michael learns a new command, and Allen makes it gross.
The full show notes for this episode are available at https://www.codingblocks.net/episode194.
News
- Want to help out the show? Leave us a review!
- Ludum Dare is a bi-annual game jam that’s been running for over 20 years now. Jam #51 is coming up September 30th to October 3rd. (ldjam.com)
- We previously talked about Ludum Dare in episode 146.
The Index
Meet the Middle Man
- The index refers to the set of blobs and trees created when running a
git add
, when you “stage” files. - These trees and blobs are not a part of the repository yet!
- If you were to unstage the changes using a reset, you’d have an orphaned blob(s) that would eventually get cleaned up.
- The index is a staging area for your next commit.
- The staging area allows you to build up your next commit in stages.
- You can almost ignore the index by doing a
git commit -a
(but shouldn’t). - In Subversion, the next set of changes is always determined by looking at the differences in the current working tree.
- In Git, the next set of changes is determined by looking at your index and comparing that to the latest
HEAD
.-
git add
allows you to make additional changes before executing your commit with things likegit add --patch
andgit add --interactive
parameters.
- For Emacs fans out there, the author mentioned
gitsum
. (GitHub)
-
Taking the Index Further
- The author mentions “Quilt!”, is it this? (man7.org)
- The primary difference between Git and Quilt is Git only allows one patch to be constructed at a time.
- Situation the author describes is: What if I had multiple changes I wanted to test independently with each other?
- There isn’t anything built into Git to allow you to try out parallel sets of changes on the fly.
- Multiple branches would allow you to try out different combinations and the index allows you to stage your changes in a series of commits, but you can’t do both at the same time.
- To do this you’d need an index that allows for more than a single commit at a time.
- Stacked Git is a tool that lets you prepare more than one index at a time. (stacked-git.github.io)
- The author gives an example of using regular Git to do two commits by interactively selecting a patch.
- Then, the author gives the example of how you’d have to go about disabling one set of changes to test the other set of changes. It’s not great … swapping between branches, cherry-picking changes, etc.
- If you find yourself in this situation, definitely take a look at Stacked Git. Using Stacked Git, you are basically pushing and popping commits on a stack.
Resources we Like
-
Git from the Bottom Up by John Wiegley (jwiegley.github.io)
- The Index: Meet the middle man (jwiegley.github.io)
- Taking the Index Further (jwiegley.github.io)
-
git add –patch and –interactive by Markus Wein (nuclearsquid.com)
-
We previously discussed the
--patch
option in episode 22.
-
We previously discussed the
- gitsum Emacs Plugin (GitHub)
- Darcs is a free, open-source, cross platform version control system with a focus on changes rather than snapshots. (darcs.net)
- Stacked Git (stacked-git.github.io)
Tip of the Week
- Diffusion Bee is GUI for running Stable Diffusion on M1 macs. It’s got a one-click installer that you can get up and generating weird computer art in minutes … as long as you’re on a recent version of macOS and M1 hardware. (GitHub)
- No M1 Mac? You can install the various packages you need to do it yourself, some assembly required! (assembly.ai)
- Git Tower is a fresh take on Git UI that lets you drag-n-drop branches, undo changes, and manage conflicts. Give it a shot! (git-tower.com)
- Git Kraken is the Gold Standard when it comes to Git UIs. It’s a rich, fully featured environment for managing all of your branches and changes. They are also the people behind the popular VS Code Extension GitLens (gitkraken.com)
- GitHub CLI is an easy to use command line interface for interacting with GitHub. Reason 532 to love it … draft PR creation via
gh pr create --draft
! (cli.github.com)