切换分支的时候,需要更新所有的子模块,可以编写 Shell 代码简化这一过程。
本教程适用于 mac 系统,终端使用 zsh。
快速调用 Shell 脚本
- 将 Shell 代码存储为 .sh 文件,例如quickCheckout.sh
- 在终端中,cd 到当前文件夹,赋予代码运行权限:chmod +x quickCheckout.sh
- 打开“访达”,进入“用户/用户名”文件夹,找到 .zshrc 文件(如果找不到尝试 command+shift+. 来显示隐藏文件,或全局搜索)
- 编辑 .zshrc 文件,添加一行代码。
其中文件位置要修改成自己的文件位置,别名要修改成自己的别名。
例如这是一个 quickCheckout 脚本的别名:
- alias quickcheckout='/Users/user/Desktop/Shell/quickCheckout.sh'
复制代码 执行上面的操作后,就可以快速调用自己的 Shell 代码了:
快速切换 Git 分支
下面的代码可以快速切换分支,包括主存储库和所有的子存储库:- #!/bin/zsh
- #快速切换分支,包括所有子模块
- #会将主模块和所有子模块 checkout 到指定分支,随后执行 git pull
- # 定义颜色
- BLUE='\033[34m'
- RED='\033[91m'
- NC='\033[0m'
- # 检查是否在 git 仓库中
- if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
- echo -e "${RED}需要移动到 Git 仓库。${NC}"
- exit 1
- fi
- # 获取用户输入的分支名称
- echo -e "${BLUE}请输入要切换到的分支名称:${NC}"
- read branch_name
- # 检查是否输入了分支名称
- if [ -z "$branch_name" ]; then
- echo -e "${RED}分支名称不能为空${NC}"
- exit 1
- fi
- # 切换到指定分支
- git checkout -m $branch_name
- git pull || echo "'${RED}主项目拉取最新的更改失败${NC}'"
- if [ $? -ne 0 ]; then
- echo -e "${RED}切换到分支 $branch_name 失败${NC}"
- exit 1
- fi
- # 遍历所有子模块并切换到同名分支
- git submodule foreach "
- git checkout -m $branch_name || echo "'${RED}子模块 \$name 切换到分支 $branch_name 失败${NC}'"
- git pull || echo "'${RED}子模块 \$name 拉取最新的更改失败${NC}'"
- "
- echo -e "${BLUE}操作完成。${NC}"
- # 检查每个子模块的切换状态
- echo "\033[34m-------------------------------\033[0m"
- git submodule foreach '
- current_branch=$(git symbolic-ref --short HEAD)
- if [ "$current_branch" != "'"$branch_name"'" ]; then
- echo "'"${RED}子模块 \$name 当前分支为 \$current_branch,未切换到分支 $branch_name${NC}"'"
- else
- echo "'"${BLUE}子模块 \$name 成功切换到分支 $branch_name${NC}"'"
- fi
- '
- echo "\033[34m-------------------------------\033[0m"
复制代码 快速 Pull
下面的代码可以快速的 Pull,包括主存储库和所有的子存储库:- #!/bin/zsh
- # 检查是否在 git 仓库中
- if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
- echo "\033[34m需要移动到 Git 仓库。\033[0m"
- exit 1
- fi
- # 询问是否需要清除本地的更改
- echo "\033[34m是否需要清除本地的更改? (y/n)\033[0m"
- read -r response
- if [ "$response" = "y" ] || [ "$response" = "Y" ]; then
- echo "\033[34m正在清除主存储库的本地更改...\033[0m"
- git reset --hard HEAD
- git clean -fd
- echo "\033[34m正在清除子模块的本地更改...\033[0m"
- git submodule foreach --recursive '
- echo "正在清除 $name 的本地更改...";
- git reset --hard HEAD;
- git clean -fd
- '
- fi
- # 主仓库
- echo "\033[34m正在 Pull 主存储库...\033[0m"
- git pull
- # 遍历所有子模块
- echo "\033[34m正在 Pull 子模块...\033[0m"
- git submodule foreach --recursive '
- echo "正在获取 $name...";
- git pull
- '
- echo "\033[34mPull 操作完成。\033[0m"
复制代码 快速切换目录
如果有几个常用目录的话,写一个脚本会很快
我添加了几个自己常用的目录,这样输入 to 之后就能快速跳转了- #!/bin/zsh
- # ANSI 转义序列,用于设置文本颜色为深蓝色
- BLUE='\033[34m'
- NC='\033[0m' # No Color, 用于重置颜色
- # 定义一个关联数组来存储目录路径
- typeset -A directories
- typeset -A directories_name
- # 添加一些目录到字典中
- directories=(
- d "/Users/user/Desktop"
- n "/Users/user/Desktop/Note"
- )
- directories_name=(
- d "Desktop"
- n "笔记"
- )
- # 显示提示信息
- print "${BLUE}-----------------------${NC}"
- print "${BLUE}请输入要切换到的目录路径,回车回到主目录:${NC}"
- for key in "${(@k)directories_name}"; do
- print "${BLUE}输入 ${key}, 去往:${directories_name[$key]}${NC}"
- done
- read -r dir_name
- # 检查目录
- if [[ -n "${directories[$dir_name]}" ]]; then
- if cd "${directories[$dir_name]}"; then
- print "${BLUE}成功切换到目录 ${directories[$dir_name]}${NC}"
- else
- print "${BLUE}无法切换到目录 ${directories[$dir_name]}${NC}"
- exit 1
- fi
- elif [[ -z "$dir_name" ]]; then
- cd
- else
- print "${BLUE}目录名称 $dir_name 不存在${NC}"
- exit 1
- fi
- print "${BLUE}-----------------------${NC}"
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |