找回密码
 立即注册
首页 业界区 安全 使用 Shell 代码简化 Git 步骤

使用 Shell 代码简化 Git 步骤

葛雅隽 昨天 13:25
切换分支的时候,需要更新所有的子模块,可以编写 Shell 代码简化这一过程。
本教程适用于 mac 系统,终端使用 zsh。
快速调用 Shell 脚本


  • 将 Shell 代码存储为 .sh 文件,例如quickCheckout.sh
  • 在终端中,cd 到当前文件夹,赋予代码运行权限:chmod +x quickCheckout.sh
  • 打开“访达”,进入“用户/用户名”文件夹,找到 .zshrc 文件(如果找不到尝试 command+shift+. 来显示隐藏文件,或全局搜索)
  • 编辑 .zshrc 文件,添加一行代码。
    其中文件位置要修改成自己的文件位置,别名要修改成自己的别名。
    例如这是一个 quickCheckout 脚本的别名:
  1. alias quickcheckout='/Users/user/Desktop/Shell/quickCheckout.sh'
复制代码
执行上面的操作后,就可以快速调用自己的 Shell 代码了:
1.png
快速切换 Git 分支

下面的代码可以快速切换分支,包括主存储库和所有的子存储库:
  1. #!/bin/zsh
  2. #快速切换分支,包括所有子模块
  3. #会将主模块和所有子模块 checkout 到指定分支,随后执行 git pull
  4. # 定义颜色
  5. BLUE='\033[34m'
  6. RED='\033[91m'
  7. NC='\033[0m'
  8. # 检查是否在 git 仓库中
  9. if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
  10.   echo -e "${RED}需要移动到 Git 仓库。${NC}"
  11.   exit 1
  12. fi
  13. # 获取用户输入的分支名称
  14. echo -e "${BLUE}请输入要切换到的分支名称:${NC}"
  15. read branch_name
  16. # 检查是否输入了分支名称
  17. if [ -z "$branch_name" ]; then
  18.   echo -e "${RED}分支名称不能为空${NC}"
  19.   exit 1
  20. fi
  21. # 切换到指定分支
  22. git checkout -m $branch_name
  23. git pull || echo "'${RED}主项目拉取最新的更改失败${NC}'"
  24. if [ $? -ne 0 ]; then
  25.   echo -e "${RED}切换到分支 $branch_name 失败${NC}"
  26.   exit 1
  27. fi
  28. # 遍历所有子模块并切换到同名分支
  29. git submodule foreach "
  30.   git checkout -m $branch_name || echo "'${RED}子模块 \$name 切换到分支 $branch_name 失败${NC}'"
  31.   git pull || echo "'${RED}子模块 \$name 拉取最新的更改失败${NC}'"
  32. "
  33. echo -e "${BLUE}操作完成。${NC}"
  34. # 检查每个子模块的切换状态
  35. echo "\033[34m-------------------------------\033[0m"
  36. git submodule foreach '
  37.   current_branch=$(git symbolic-ref --short HEAD)
  38.   if [ "$current_branch" != "'"$branch_name"'" ]; then
  39.     echo "'"${RED}子模块 \$name 当前分支为 \$current_branch,未切换到分支 $branch_name${NC}"'"
  40.   else
  41.     echo "'"${BLUE}子模块 \$name 成功切换到分支 $branch_name${NC}"'"
  42.   fi
  43. '
  44. echo "\033[34m-------------------------------\033[0m"
复制代码
快速 Pull

下面的代码可以快速的 Pull,包括主存储库和所有的子存储库:
  1. #!/bin/zsh
  2. # 检查是否在 git 仓库中
  3. if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
  4.     echo "\033[34m需要移动到 Git 仓库。\033[0m"
  5.     exit 1
  6. fi
  7. # 询问是否需要清除本地的更改
  8. echo "\033[34m是否需要清除本地的更改? (y/n)\033[0m"
  9. read -r response
  10. if [ "$response" = "y" ] || [ "$response" = "Y" ]; then
  11.     echo "\033[34m正在清除主存储库的本地更改...\033[0m"
  12.     git reset --hard HEAD
  13.     git clean -fd
  14.     echo "\033[34m正在清除子模块的本地更改...\033[0m"
  15.     git submodule foreach --recursive '
  16.         echo "正在清除 $name 的本地更改...";
  17.         git reset --hard HEAD;
  18.         git clean -fd
  19.     '
  20. fi
  21. # 主仓库
  22. echo "\033[34m正在 Pull 主存储库...\033[0m"
  23. git pull
  24. # 遍历所有子模块
  25. echo "\033[34m正在 Pull 子模块...\033[0m"
  26. git submodule foreach --recursive '
  27.     echo "正在获取 $name...";
  28.     git pull
  29. '
  30. echo "\033[34mPull 操作完成。\033[0m"
复制代码
快速切换目录

如果有几个常用目录的话,写一个脚本会很快
我添加了几个自己常用的目录,这样输入 to 之后就能快速跳转了
  1. #!/bin/zsh
  2. # ANSI 转义序列,用于设置文本颜色为深蓝色
  3. BLUE='\033[34m'
  4. NC='\033[0m' # No Color, 用于重置颜色
  5. # 定义一个关联数组来存储目录路径
  6. typeset -A directories
  7. typeset -A directories_name
  8. # 添加一些目录到字典中
  9. directories=(
  10.   d "/Users/user/Desktop"
  11.   n "/Users/user/Desktop/Note"
  12. )
  13. directories_name=(
  14.   d "Desktop"
  15.   n "笔记"
  16. )
  17. # 显示提示信息
  18. print "${BLUE}-----------------------${NC}"
  19. print "${BLUE}请输入要切换到的目录路径,回车回到主目录:${NC}"
  20. for key in "${(@k)directories_name}"; do
  21.   print "${BLUE}输入 ${key}, 去往:${directories_name[$key]}${NC}"
  22. done
  23. read -r dir_name
  24. # 检查目录
  25. if [[ -n "${directories[$dir_name]}" ]]; then
  26.   if cd "${directories[$dir_name]}"; then
  27.     print "${BLUE}成功切换到目录 ${directories[$dir_name]}${NC}"
  28.   else
  29.     print "${BLUE}无法切换到目录 ${directories[$dir_name]}${NC}"
  30.     exit 1
  31.   fi
  32. elif [[ -z "$dir_name" ]]; then
  33.   cd
  34. else
  35.   print "${BLUE}目录名称 $dir_name 不存在${NC}"
  36.   exit 1
  37. fi
  38. print "${BLUE}-----------------------${NC}"
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册