自动化Git操作脚本:一键推送与打开Pull Request

在Unix-like系统中,如OSX和Ubuntu,经常需要执行一些重复的Git操作,例如推送当前分支到远程仓库并创建Pull Request。为了简化这个过程,可以编写一个Bash脚本自动化这些操作。本文将介绍如何编写这样一个脚本,并解释其工作原理。

首先,需要定义一些颜色常量,以便于在终端中输出更易读的信息。

GREEN='\033[0;32m' RESET='\033[0m'

接下来,定义一个名为gpr的函数,用于推送当前分支并尝试打开Pull Request页面。

gpr() { # 获取当前分支名称,如果无法获取,则使用'HEAD' branch=$(git symbolic-ref -q HEAD) branch=${branch##*/} branch=${branch:-HEAD} # 推送过程可能需要一些时间,因此通知用户正在工作 echo "正在推送分支 ${GREEN}${branch}${RESET}..." # 推送到远程仓库,捕获输出并回显 push_output=$(git push origin -u ${branch} 2>&1) echo "$push_output" # 如果输出中包含http,则可能是GitHub/GitLab等的链接,尝试打开它 link=$(echo $push_output | grep -o 'http.*' | sed -e 's/[[:space:]]*$//') if [ -n "${link}" ]; then echo "正在打开: ${GREEN}${link}${RESET}..." python -mwebbrowser "${link}" fi }

这个脚本的工作原理如下:

首先,定义了两个颜色常量,用于在终端输出中设置绿色和重置文本颜色。

然后,定义了gpr函数。需要推送当前分支,因此首先获取当前分支的名称。使用git symbolic-ref命令获取当前分支的符号名称,例如refs/heads/my-new-branch。然后,使用Bash字符串替换功能去除refs/heads/部分。如果没有分支(例如,处于分离HEAD状态),则使用HEAD作为分支名称。

接下来,输出当前要推送的分支名称,并执行推送操作,将所有输出存储在push_output变量中。2>&1是一个常见的Bash技巧,它确保将stderr(文件描述符2)的所有输出重定向到stdout(文件描述符1)。这意味着无论程序将输出写入stdout还是stderr,都能捕获它。

Git推送的输出将取决于使用的Git服务器。对于GitHub,它可能看起来像这样:

remote: remote: 创建Pull Request remote: remote: 通过访问以下链接在GitHub上为'feat/doc-cleanup'创建Pull Request: remote: https://github.com/dwmkerr/dotfiles/pull/new/feat/doc-cleanup remote: To github.com:dwmkerr/dotfiles * [new branch] feat/doc-cleanup -> feat/doc-cleanup Branch feat/doc-cleanup set up to track remote branch feat/doc-cleanup from origin.

现在,只需要检查是否有任何文本以http开头,如果有,那么它很可能是GitHub/GitLab等的链接,然后尝试打开它。使用grep命令提取从http开始的所有内容,并使用sed命令去除任何尾随的空白字符。如果找到了链接,使用python命令打开它(这是一个相当安全的跨平台解决方案)。

就是这样!当有一个准备好要推送并创建Pull Request的分支时,只需运行gpr命令,分支将被推送到origin,如果有Pull Request网页,它将被打开。

git push 并直接在Chrome中打开PR - 适用于 @github 和 @gitlab 🚀 这是如何设置的 👉 https://t.co/YfNTmdwTFt #github #gitlab
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485