You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 12:23:23