如何查找Git分支对应的工作树路径?偏好rev-parse类方案
判断Git分支是否在工作树检出并获取路径(基于git rev-parse方案)
核心思路
利用Git工作树的目录结构和git rev-parse命令的特性,直接查询每个工作树的当前检出分支,匹配目标分支后获取其路径,全程无需解析git worktree list的输出。
实现脚本(Bash)
假设目标分支为feature-branch,脚本示例如下:
# 定义要检查的目标分支 TARGET_BRANCH="feature-branch" # 1. 检查主仓库(默认工作树) MAIN_CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD) if [ "$MAIN_CURRENT_BRANCH" = "$TARGET_BRANCH" ]; then echo "主工作树检出目标分支,路径:$(git rev-parse --show-toplevel)" fi # 2. 遍历所有附加工作树 # 获取Git存储附加工作树配置的原生目录(避免硬编码适配不同仓库结构) WORKTREES_STORAGE=$(git rev-parse --git-path worktrees) if [ -d "$WORKTREES_STORAGE" ]; then # 遍历每个附加工作树的Git配置目录 for WORKTREE_GIT_DIR in "$WORKTREES_STORAGE"/*; do # 跳过非目录项 [ -d "$WORKTREE_GIT_DIR" ] || continue # 获取当前工作树的检出分支(忽略损坏的工作树) CURRENT_BRANCH=$(git --git-dir="$WORKTREE_GIT_DIR" rev-parse --abbrev-ref HEAD 2>/dev/null) if [ "$CURRENT_BRANCH" = "$TARGET_BRANCH" ]; then # 获取该工作树的根目录绝对路径 WORKTREE_PATH=$(git --git-dir="$WORKTREE_GIT_DIR" rev-parse --show-toplevel) echo "附加工作树检出目标分支,路径:$WORKTREE_PATH" fi done fi
关键命令说明
git rev-parse --git-path worktrees:获取Git存储附加工作树配置的绝对目录,比硬编码.git/worktrees更适配自定义Git目录、裸仓库等特殊场景。git --git-dir=<工作树Git目录> rev-parse --abbrev-ref HEAD:指定工作树的Git配置目录,查询其当前检出的分支短名称。git --git-dir=<工作树Git目录> rev-parse --show-toplevel:获取该工作树的根目录绝对路径。2>/dev/null:忽略损坏工作树的错误输出,提升脚本健壮性。
注意事项
- 脚本会同时检查主仓库(默认工作树)和所有附加工作树。
- 如果同一分支被多个工作树检出,脚本会输出所有对应的路径。
内容的提问来源于stack exchange,提问作者Jordan Barrett
相关产品推荐
相关产品推荐

