提升仓库克隆操作的小技巧
用更少输入,更快 clone 仓库
对于经常从网页复制 Git 仓库地址的人来说,最耗时的部分通常不是 clone 本身,而是反复输入 git clone 这几个字。其实可以把这一步自动化:当你在终端里粘贴一个单独的仓库 URL 时,终端直接帮你补成 clone 命令并执行。
Windows PowerShell
PowerShell 可以借助 PSReadLine,在按下回车前检查当前输入。如果这一整行是一个符合规则的 Git 地址,就自动改写为 git clone。
把下面这段放到你的 PowerShell 配置文件里(一般在 $PROFILE),重开终端后就能生效:
Set-PSReadLineKeyHandler -Key Enter -ScriptBlock {
param($key, $arg)
$line = $null
$cursor = $null
[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$line, [ref]$cursor)
$text = $line.Trim()
if ($text -match '^(?<url>(?:git@|https://)\S+\.git)$') {
$url = $Matches.url
[Microsoft.PowerShell.PSConsoleReadLine]::RevertLine()
[Microsoft.PowerShell.PSConsoleReadLine]::Insert("git clone $url")
}
[Microsoft.PowerShell.PSConsoleReadLine]::AcceptLine()
}Linux Bash
Bash 也可以做到类似效果,方法是利用 readline 的键绑定,在回车时读取当前输入内容。如果当前行看起来就是一个 Git 仓库地址,就把它改写成 git clone 再执行。
把下面内容加入 ~/.bashrc:
function __git_clone_on_enter {
local line=$READLINE_LINE
if [[ $line =~ ^(git@|https://)[^[:space:]]+\.git$ ]]; then
READLINE_LINE="git clone $line"
READLINE_POINT=${#READLINE_LINE}
fi
}
bind -x '"\C-x\C-m": __git_clone_on_enter'
bind '"\C-m": "\C-x\C-m\C-j"'加载配置后,你就可以直接粘贴仓库 URL 并回车。只要地址符合规则,Bash 会自动帮你把当前行改成 git clone;普通命令也会照常回车执行。
macOS Zsh
Zsh 有一个更短的做法,叫 suffix alias。它的思路是:把某类后缀映射成某个命令,从而让输入仓库地址时自动触发 clone。
在 ~/.zshrc 里加入:
alias -s git='git clone'这样一来,遇到以 .git 结尾的地址时,Zsh 就会把它当成 git clone 的目标来处理。对习惯在终端里快速切换项目的人来说,这种方式非常省事。
Linux Zsh
我试了下在 Linux 下安装的 Zsh,似乎无法像 macOS 里的那样直接进行别名操作,那就也只能自行实现一次了
_git_clone_accept_line() {
if [[ $BUFFER =~ '^(git@|https://)[^[:space:]]+\.git$' ]]; then
BUFFER="git clone $BUFFER"
fi
zle .accept-line
}
zle -N _git_clone_accept_line
bindkey '^M' _git_clone_accept_line结语
我最初是受到 zsh suffix alias 的启发,在 macOS 上尝试了这种做法,觉得甚是方便。等到想在 Windows 或 Linux 上也实现类似功能时,发现 PowerShell 和 Bash 也能做到,虽然实现方式不同,但最终效果是类似的。
当整行内容是单独的仓库地址,并且它明确以
.git结尾时,才自动触发 clone。
实际使用时,你可以养成下面这个动作:
- 在浏览器里复制仓库地址。
- 切回终端,直接粘贴。
- 按回车。
- 等待仓库自动开始克隆。
对于追求操作流畅度的人来说,这类减少重复输入的小改动通常最有体感:不需要改变工作方式,只是少敲几下键盘,长期下来就能省下不少时间。