Peter Benjamin (they/them)
Posted on July 25, 2021
Table of Contents
Overview
One thing I really like about Visual Studio Code is the ability to clone a repo and open it in the editor with little-to-no friction in 3 quick steps:
- In the Command Palette, select:
> Git: clone
- Enter the repo to clone
- Select the directory to clone into
Then Visual Studio Code launches a new editor in the repo and I'm ready to go.
I want to have a similar experience in my terminal-based development workflow.
The Solution
At a high-level, my current solution is to invoke a bash function that prompts the user for the repo to clone and directory to clone it into, then run vim on the repo in a new tmux window.
Here is the implementation as a bash script:
git-clone-tmux() {
local repo=""
local directory=""
local clone_path=""
repo="${1}"
directory="${2}"
[ -z "${repo}" ] && read -e -p "Repo: " repo
[ -z "${directory}" ] && read -e -p "Directory: " -i "${HOME}/Work" directory
if [[ "${repo}" =~ ^github ]] || [[ "${repo}" =~ "${GH_HOST}" ]]; then
clone_path="${directory}/${repo}"
gh repo clone "${repo}" "${clone_path}"
elif [[ "${repo}" =~ ^gitlab ]] || [[ "${repo}" =~ "${GL_HOST}" ]]; then
clone_path="${directory}/${repo}"
glab repo clone "${repo}" "${clone_path}"
else
clone_path="${directory}/$(basename ${repo})"
git clone "${repo}" "${clone_path}"
fi
tmux new-window -c "${clone_path}" -n "${clone_path}" vim .
}
What happens when you run $ git-clone-tmux
?
-
[ -z "${repo}" ] && read -e -p "Repo: " repo
- If
${repo}
is empty, then prompt user interactively
- If
-
[ -z "${directory}" ] && read -e -p "Directory: " -i "${HOME}/Work" directory
- If
${directory}
is empty, then prompt user interactively
- If
-
if [[ "${repo}" =~ ^github ]]
- If
${repo}
starts withgithub
, then usegh
to clone the repo
- If
-
if [[ "${repo}" =~ ^gitlab ]]
- If
${repo}
starts withgitlab
, then useglab
to clone the repo
- If
- otherwise, assume
${repo}
starts withhttps://
-
tmux new-window -c "${clone_path}" -n "${clone_path}" vim .
- Launch new tmux window, setting the working directory to the newly cloned repo, and run
vim .
- Launch new tmux window, setting the working directory to the newly cloned repo, and run
Bonus
You can create a git alias so that you can call this function as if it were a git subcommand.
Just run the following:
$ git config --global alias.clone-tmux '!/usr/bin/env bash -ic git-clone-tmux'
Or add the following to your git config file:
[alias]
clone-tmux = !/usr/bin/env bash -ic git-clone-tmux
Now, you can run git clone-tmux <repo> <dir>
or git clone-tmux
for interactive prompting.
Extra bonus: shell tab completions work on git aliases too!
Summary
This is, by no means, the most elegant script, but it works for me needs.
I hope you enjoyed reading this article and I hope it inspires you to find ways to streamline and improve your workflow and productivity!
For more git alias goodies, check out my .config/git/config
dotfile.
For more bash function goodies, check out my .functions
dotfile.
Happy hacking!
Posted on July 25, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.