diff --git a/dot_gitconfig.tmpl b/dot_gitconfig.tmpl index 5e530c6..7964457 100644 --- a/dot_gitconfig.tmpl +++ b/dot_gitconfig.tmpl @@ -22,6 +22,7 @@ lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative today = log --since=midnight --author='Roberto Bonvallet' --oneline pushall = !git remote | xargs -L1 git push --all + pushmulti = !git-pushmulti s = status a = add --all cm = commit -m diff --git a/dot_local/bin/executable_git-pushmulti b/dot_local/bin/executable_git-pushmulti new file mode 100644 index 0000000..bb2defa --- /dev/null +++ b/dot_local/bin/executable_git-pushmulti @@ -0,0 +1,53 @@ +#!/bin/bash + +# -------------------------- +# 擷取 remote list +# -------------------------- +extract_list() { + local input="$1" + input="${input//[()]/}" # 去掉括號 + IFS=',' read -ra result <<< "$input" + echo "${result[@]}" +} + +# -------------------------- +# 主邏輯 +# -------------------------- + +# 預設值 +remotes=() +branches=() + +# 取出第一個參數:應該是 (remote1,remote2) +if [[ "$1" =~ ^\(.+\)$ ]]; then + remotes=($(extract_list "$1")) + shift +else + echo "❌ 請使用 (remote1,remote2) 的格式作為第一個參數" + exit 1 +fi + +# 剩下的參數是 branches(若為空就抓當前 branch) +if [[ $# -gt 0 ]]; then + branches=("$@") +else + current_branch=$(git symbolic-ref --short HEAD 2>/dev/null) + if [[ -z "$current_branch" ]]; then + echo "❌ 無法偵測目前所在 branch,請指定" + exit 1 + fi + branches=("$current_branch") +fi + +# -------------------------- +# 執行 git push +# -------------------------- +for remote in "${remotes[@]}"; do + for branch in "${branches[@]}"; do + echo "🚀 Pushing to '$remote' (branch: '$branch')..." + git push "$remote" "$branch" + if [[ $? -ne 0 ]]; then + echo "❌ Push to '$remote' 失敗" + fi + done +done diff --git a/dot_zshrc b/dot_zshrc index af37e46..bc278be 100644 --- a/dot_zshrc +++ b/dot_zshrc @@ -191,3 +191,17 @@ if ! alias imgcat &>/dev/null && ! functions imgcat &>/dev/null && command -v ma fi zinit light mass8326/zsh-chezmoi + +# 自動補上 noglob 並禁用 Zsh 的 globbing 解析 +function git_pushmulti() { + # 手動處理方括號或括號內容,並進行推送 + local remotes="$1" + local branches="$2" + remotes="${remotes//\[/\"[\"}" + remotes="${remotes//\]/\"]\"}" + branches="${branches//\[/\"[\"}" + branches="${branches//\]/\"]\"}" + + # 執行 git pushmulti + noglob git pushmulti "$remotes" "$branches" +} \ No newline at end of file