前言
在工作中,协作场景下,避免不了要告诉同事你当前的开发分支,通常情况下需要2步
Step1 查看当前分支
git branch
这里还有个case,分支多的话需要翻页查看,才能找到当前分支
要准确获取需要加上--show-current
参数
git branch --show-current
Step2 鼠标右键复制当前分支
本文将会介绍2种方式,实现1行代码直接复制分支
- Shell
- Node CLI
核心步骤
获取分支名
这个上面介绍了,可以通过git branch --show-current
获取
在 shell
里,可以直接将结果存到变量里
# bcp.sh branch=$(git branch --show-current) echo $branch
Node.js
里,可以通过child_process
模块来执行命令
const { execSync } = require('child_process'); const branch = execSync('git branch --show-current').toString().trim(); console.log(branch);
复制到剪贴板
这一块就是调用系统指令执行了,不同操作系统的不一样
之前用过 node-copy-paste 这个库
大概介绍了一下各个操作系统所用的指令:MacOS(pbcopy)、Windows(clip)、Linux(xclip)
这里笔者用的是MacOS
,所以直接用pbcopy
指令
只需要在上面的基础上加上| pbcopy
即可
branch=$(git branch --show-current) echo $branch | pbcopy # 或 git branch --show-current | pbcopy
运行后发现git branch --show-current
获取的内容会有换行符,可以通过tr
指令去掉
git branch --show-current | tr -d '\n' | pbcopy
Node.js 里,在.trim()
后加上.replace(/\n/g, '')
即可
execSync('git branch --show-current').toString().trim().replace(/\n/g, '');
不过实际情况下,我们需要将这么长的指令封装起来,方便使用
谁没事敲这么多,都可以手动CV好多遍了
封装实现
Shell
只需要使用alias
指令即可
alias bcy='git branch --show-current | tr -d "\n" | pbcopy'
然后将这个指令加入到~/.zshrc
或~/.bashrc
里即可(可以使用 echo $0
确定自己的终端默认的shell执行器)
可运行下面的shell脚本完成自动添加
echo 'alias bcy="git branch --show-current | tr -d \"\\n\" | pbcopy"' >> ~/.zshrc
source ~/.zshrc
当然我们也可以打印一些提示信息
alias bcy='branch=$(git branch --show-current); echo "当前分支:$branch"; echo $branch | tr -d "\n" | pbcopy'
对应的安装脚本如下
echo "alias bcy='branch=\$(git branch --show-current); echo \"当前分支:\$branch\"; echo \$branch | tr -d \"\\\\n\" | pbcopy'" >> ~/.zshrc
Node CLI
上面介绍的是shell
里的实现,这里介绍下Node.js
里的实现
方便有 Node 环境,但不熟悉Shell的同学使用
脚本也很简单
#!/usr/bin/env node const { execSync } = require('child_process') const ncp = require('copy-paste') // 获取当前仓库分支 const branch = execSync('git branch --show-current') .toString() .trim() .replace(/\n/g, '') console.log('当前分支:', branch) ncp.copy(branch)
这个CLI通过npm包发布了,可以直接npx bcy
使用
或者 npm i bcy -g
全局安装
包名实在是难取,简单语义化一点的都被占用了,让GPT 辅助了一下
最后用了搜了一圈不重复的只有bcy
总结
本文简单介绍了如何通过Shell
和Node.js
实现复制当前分支名到剪贴板
如果你有更好的实现方式,欢迎留言讨论