mcpField
G
git:compare-worktrees

git:compare-worktrees

github.com/neolabhq开发1.8k443 次安装10 周前更新
代码仓库

关于 git:compare-worktrees

这是一个比较 Git worktree 中文件或目录差异的命令,可按路径或分支选择比较对象,也能输出差异统计。适用于检查功能分支变更、比较实现和合并前审查。

主要功能

  1. 01列出并选择 worktree
  2. 02比较文件或目录差异
  3. 03按分支查找比较对象
  4. 04输出变更统计
  5. 05处理二进制文件与权限差异

适用场景

  1. 01审查功能分支变更
  2. 02比较不同分支的实现
  3. 03合并前检查源代码和测试
  4. 04快速确认指定文件差异

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/neolabhq/context-engineering-kit --skill git:compare-worktrees

安装后在 Claude Code 中输入/git:compare-worktrees确认已加载。

详细介绍

Claude 命令:比较工作树

你的任务是比较不同 Git 工作树之间的文件和目录,帮助用户了解不同分支或工作树中的代码差异。

说明

重要:请严格按以下步骤执行:

  1. 检查当前状态:运行 git worktree list,显示所有现有工作树及其位置

  2. 解析用户输入:对提供的每个参数进行分类:

    • 无参数:交互模式——询问用户要比较什么
    • --stat:显示差异统计摘要(已更改文件、插入、删除)
    • 工作树路径:与 git worktree list 中某个工作树根目录匹配的路径
    • 分支名称:与某个工作树中的分支匹配的名称
    • 文件/目录路径:当前工作树内要比较的路径
  3. 确定比较目标(要比较的工作树): a. 如果用户提供了工作树路径:将这些路径作为比较目标 b. 如果用户指定了分支名称:从 git worktree list 中查找这些分支对应的工作树 c. 如果除当前工作树外只有一个工作树:将当前工作树和该工作树作为比较目标 d. 如果有多个工作树且未指定目标:列出工作树并询问用户要比较哪些 e. 如果没有其他工作树:提出使用 git diff 与某个分支进行比较

  4. 确定比较内容(工作树内的文件/目录): a. 如果用户指定了文件或目录路径:比较所有这些路径 b. 如果没有指定路径:询问用户:

    • “比较整个工作树?”或
    • “比较特定文件/目录?(输入路径)”
  5. 执行比较:

    比较工作树之间的特定文件:

    diff <worktree1>/<path> <worktree2>/<path>
    # Or for unified diff format:
    diff -u <worktree1>/<path> <worktree2>/<path>
    

    比较工作树之间的目录:

    diff -r <worktree1>/<directory> <worktree2>/<directory>
    # Or for summary only:
    diff -rq <worktree1>/<directory> <worktree2>/<directory>
    

    分支级比较(使用 git diff):

    git diff <branch1>..<branch2> -- <path>
    # Or for stat summary:
    git diff --stat <branch1>..<branch2>
    

    与当前工作目录比较:

    diff <current-file> <other-worktree>/<file>
    
  6. 整理并展示结果:

    • 显示清晰的标题,说明比较内容
    • 对于较大的差异,先询问是否展示摘要
    • 突出显示重要更改(新建文件、删除文件、重命名文件)
    • 提供各工作树所含分支的相关信息

比较模式

模式说明命令模式
文件差异比较工作树之间的单个文件diff -u <wt1>/file <wt2>/file
目录差异递归比较目录diff -r <wt1>/dir <wt2>/dir
仅摘要显示存在差异的文件(不显示内容)diff -rq <wt1>/ <wt2>/
Git diff使用 Git 的 diff(基于分支)git diff branch1..branch2 -- path
统计视图显示更改统计信息git diff --stat branch1..branch2

工作树检测

此命令使用 git worktree list 查找工作树:

/home/user/project           abc1234 [main]
/home/user/project-feature   def5678 [feature-x]
/home/user/project-hotfix    ghi9012 [hotfix-123]

此命令从输出中提取:

  • 路径:工作树目录的绝对路径
  • 分支:方括号中的分支名称(用户指定分支名称时使用)

示例

比较工作树之间的特定文件:

> /git:compare-worktrees src/app.js
# Prompts to select which worktree to compare with
# Shows diff of src/app.js between current and selected worktree

比较两个指定的工作树:

> /git:compare-worktrees ../project-main ../project-feature src/module.js
# Compares src/module.js between the two specified worktrees

比较多个文件/目录:

> /git:compare-worktrees src/app.js src/utils/ package.json
# Shows diffs for all three paths between worktrees

比较整个目录:

> /git:compare-worktrees src/
# Shows all differences in src/ directory between worktrees

获取统计摘要:

> /git:compare-worktrees --stat
# Shows which files differ and line counts

交互模式:

> /git:compare-worktrees
# Lists available worktrees
# Asks which to compare
# Asks for specific paths or entire worktree

按分支名称与分支工作树比较:

> /git:compare-worktrees feature-x
# Finds worktree for feature-x branch and compares

比较分支工作树之间的指定路径:

> /git:compare-worktrees main feature-x src/ tests/
# Compares src/ and tests/ directories between main and feature-x worktrees

输出格式

文件比较标题:

Comparing: src/app.js
  From: /home/user/project (main)
  To:   /home/user/project-feature (feature-x)
---
[diff output]

摘要输出:

Worktree Comparison Summary
===========================
From: /home/user/project (main)
To:   /home/user/project-feature (feature-x)

Files only in main:
  - src/deprecated.js

Files only in feature-x:
  + src/new-feature.js
  + src/new-feature.test.js

Files that differ:
  ~ src/app.js
  ~ src/utils/helpers.js
  ~ package.json

Statistics:
  3 files changed
  2 files added
  1 file removed

常见工作流

审查功能更改
# See what changed in a feature branch
> /git:compare-worktrees --stat
> /git:compare-worktrees src/components/
比较实现方案
# Compare how two features implemented similar functionality
> /git:compare-worktrees ../project-feature-1 ../project-feature-2 src/auth/
快速检查文件
# Check if a specific file differs
> /git:compare-worktrees package.json
合并前审查
# Review all changes before merging (compare src and tests together)
> /git:compare-worktrees --stat
> /git:compare-worktrees src/ tests/
# Both src/ and tests/ directories will be compared

重要说明

  • 参数检测:命令会通过与 git worktree list 的输出进行比对,自动检测参数类型:

    • 与工作树根目录匹配的路径 → 视为要比较的工作树
    • 与工作树中分支匹配的名称 → 视为要比较的工作树
    • 其他路径 → 视为要在工作树中比较的文件/目录
  • 多个路径:提供多个文件/目录路径时,所选工作树之间会比较所有路径(而不只是第一个路径)。

  • 工作树路径:指定工作树时,请使用完整路径或相对于当前目录的路径(例如 ../project-feature)

  • 分支与工作树:如果指定分支名称,命令会查找检出该分支的工作树。如果该分支不存在对应的工作树,命令会建议改用 git diff。

  • 大型差异:对于大型目录,命令会在显示完整差异输出前,询问是否先显示摘要。

  • 二进制文件:检测到二进制文件时,会报告“Binary files differ”,而不会显示实际差异。

  • 文件权限:如果文件权限不同,差异中也会显示权限变更。

  • 没有工作树:如果不存在其他工作树,命令会说明如何创建工作树,并建议改用 git diff 比较分支。

与 Create Worktree 集成

先使用 /git:create-worktree 设置用于比较的工作树:

# Create worktrees for comparison
> /git:create-worktree feature-x, main
# Created: ../project-feature-x and ../project-main

# Now compare
> /git:compare-worktrees src/

故障排除

“未找到其他工作树”

  • 先使用 /git:create-worktree <branch> 创建工作树
  • 或使用 git diff 在不借助工作树的情况下仅比较分支

“未找到该分支的工作树”

  • 该分支可能尚未创建工作树
  • 运行 git worktree list 查看可用工作树
  • 使用 /git:create-worktree <branch> 创建工作树

“工作树中不存在该路径”

  • 指定的文件/目录可能不存在于某个工作树中
  • 这可能表示该文件在某个分支中被添加或删除
  • 命令会在比较输出中报告此情况

评论

支持 Markdown