切換分支的時候,需要更新所有的子模塊,可以編寫 Shell 代碼簡化這一過程。 本教程適用於 mac 系統,終端使用 zsh。 ...
切換分支的時候,需要更新所有的子模塊,可以編寫 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}"