Sheaf
Native macOS · Open source · No server原生 macOS · 开源 · 无需服务器

One requirement,
many repositories,
one diff.
一个需求,
多个仓库,
一份改动。

A requirement like PAY-142 often touches six repositories at once. Type the number, and every repository's changes appear in one place, with how far each has merged. 一个需求(比如 PAY-142)常常同时改了六个仓库。输入需求号,所有仓库的改动集中到一处,各自合到哪一步也一目了然。

Free · MIT · Requires macOS and Git ≥ 2.31免费 · MIT 许可 · 需要 macOS 和 Git ≥ 2.31
PAY-142 across six repositories: each repository's merge stage on the left, all their changes in one stream PAY-142 横跨六个仓库:左边是各仓库的合并阶段,中间是全部改动连成的一条流

A live demo with made-up data: switch requirements, change the view, fold files, open a commit, and try the three batch buttons. 用虚构数据做的可交互演示:切换需求、换「查看」、折叠文件、打开提交,三个批量按钮也能点。

How it works怎么用

  1. Open the folder打开文件夹

    Point Sheaf at the folder that holds your repositories. It finds every repository and worktree inside.选中放仓库的文件夹,Sheaf 找出里面所有的仓库和工作目录。

  2. Follow a requirement关注一个需求

    Type a requirement number and Follow it. Sheaf finds every branch whose name contains it.输入需求号,点「关注」。Sheaf 找出分支名里带这个号的所有分支。

  3. Read看

    Every change, repository by repository, including what is not committed yet.全部改动按仓库依次排开,连还没提交的也在里面。

payment-apiIn progress · 2 uncommitted开发中 · 2 个未提交
checkout-webAwaiting release待合 release
ledger-serviceAwaiting master待合 master
gatewayFully merged已合完

The only convention: put the requirement number in the branch name, like feat-PAY-142, and start commit subjects with it. Nothing to install in your repositories, no account. 唯一的约定:分支名里带需求号,比如 feat-PAY-142,提交标题也以它开头。不用在仓库里装任何东西,不用注册。

Built for reviewing agent-written code为把关 Agent 写的代码而做

Review at any stage什么时候都能审

Before commit, before merge, or after release: it is always the same question — what does this requirement bring to master.没提交、合 master 前、发布后,看的都是同一件事:这个需求给 master 带来什么改动。

Find it again after release发布后还能回溯

Go back to a requirement's changes by its number, even after the branches are gone.按需求号回到当时的改动,分支删了也一样。

Batch actions, planned first批量操作,先列计划

Refresh remotes, fast-forward favourite branches and create GitLab MRs or GitHub PRs across every repository, after showing you what will happen.刷新远端、快进收藏分支、创建 GitLab MR 或 GitHub PR,一次作用到所有仓库,执行前先列出要做的事。

Safe by design安全为先

Never commits, rebases, force-pushes or stashes, and leaves folders with uncommitted changes alone. Every write is in the activity log.从不提交、变基、强推或 stash,不碰有未提交改动的目录。每条写操作都记在活动日志里。

Using a coding agent? Send it the commit convention and it sets the workspace up itself. 用 Coding Agent 写代码?把提交约定发给它,它会自己配置到工作区。

Install安装

  1. Download the DMG from Releases and drag Sheaf.app into Applications.从 Releases 下载 DMG,把 Sheaf.app 拖进应用程序。
  2. The app is not notarized. If macOS blocks the first launch, open System Settings → Privacy & Security and click Open Anyway, or run:应用未经 Apple 公证。如果首次打开被拦截,到系统设置 → 隐私与安全性点仍要打开,或者运行:
    xattr -dr com.apple.quarantine /Applications/Sheaf.app
  3. To create MRs or PRs, install and sign in to glab or gh. Reading changes works without them.要创建 MR/PR,需安装并登录 glab 或 gh;只看改动不需要。