Directory aware `git`
(2024-05-07)
[note]
Update 2024-12-22: The functionality described here is available natively in modern versions of Git, see more recent note Path-conditional config and SSH key signing in
git.
Update 2024-05-10: Fixed a bug in the provided script.
Update 2024-05-14: Added user name and email config features.
I have separate SSH keys and email addresses for personal projects and work projects. My work-related Git projects reside in ~/Projects/Work. Without a "directory aware" git config, I would have to define GIT_SSH_COMMAND when cloning to use the correct key, as well as set up each work repository to use the work key for interacting with the remote, as well as the user.name and user.email configuration values manually using git config commands. This is naturally very error prone and is an easy thing to forget.
To avoid these issues, here's a script that wraps git:
#!/bin/bash
# If GIT_SSH_COMMAND is set, skip automatic key selection
if [; then
# skip
elif ; then
fi
Update the GIT_ environment values as well as the directory matcher in the elif conditional to suit your needs.
Save the script as directory-aware-git, make it executable with chmod +x directory-aware-git and put it in some directory that is in $PATH. For me, that would be ~/.local/bin/. Then, add this alias to your shell config, updated with your selected path:
Enjoy 👍
Jan Tuomi