spr

spr

优化GitHub堆叠式拉取请求管理工具

spr是一款优化GitHub工作流的客户端工具,通过自动化管理堆叠式拉取请求简化开发流程。它将每个提交转化为独立PR,使分支成为PR序列。spr自动处理PR的创建、更新和合并,减少手动操作,提高开发效率。此工具便于修改提交、监控PR状态,并提供多样化配置,特别适合需要快速迭代的开发团队。spr支持灵活的PR管理,包括部分更新和合并功能,有助于维护清晰的代码历史。

SPRGitHub拉取请求代码审查版本控制Github开源项目

logo License: MIT Build ReportCard Doc Release Join the chat at https://gitter.im/ejoffe-spr/community

terminal cast

GraphQL用户

查看我的公司Inigo,了解最全面的API平台。

GitHub上的堆叠式拉取请求

轻松管理GitHub上的堆叠式拉取请求。 git spr是一个客户端工具,通过使用GitHub的拉取请求和分支,实现了简单流畅的堆叠式差异工作流程。git spr为您管理拉取请求堆栈,让您无需操心。

使用git spr,每个提交都会成为一个拉取请求,每个分支都成为一堆拉取请求的堆栈。这允许在单个分支上堆叠多个提交,避免了为每个新的更改或功能启动新分支的开销。小的更改和拉取请求变得简单快速。您不必担心堆叠在一起的分支以及管理复杂的拉取请求堆栈。最终结果是更加流畅、更快速的软件开发周期。

安装

Brew

brew tap ejoffe/homebrew-tap brew install ejoffe/tap/spr

Apt

echo "deb [trusted=yes] https://apt.fury.io/inigolabs/ /" | sudo tee /etc/apt/sources.list.d/inigolabs.list sudo apt update sudo apt install spr

手动安装

发布页面下载预编译的二进制文件,并复制到您的bin路径。

从源码安装

安装goreleaser并运行make。二进制文件可以在dist目录中找到。

make bin

工作流程

像往常一样将您的更改提交到分支。请注意,每个提交最终都会成为一个拉取请求。

> touch feature_1 > git add feature_1 > git commit -m "Feature 1" > touch feature_2 > git add feature_2 > git commit -m "Feature 2" > touch feature_3 > git add feature_3 > git commit -m "Feature 3"

提交消息的主题将成为拉取请求的标题,消息的正文将成为拉取请求的正文。 如果您有一个正在进行的更改需要提交,但还不想创建拉取请求,请以全大写的WIP开始提交消息。spr脚本不会为任何以WIP开头的提交创建拉取请求,当您准备好创建拉取请求时,请删除WIP。 您无需为每个更改创建新分支,也不必调用git push将代码推送到GitHub。相反,只需调用git spr update即可。

管理拉取请求

运行git spr update将您的整个提交堆栈同步到GitHub,并为堆栈中的每个新提交创建拉取请求。如果提交被修改,拉取请求将自动更新。该命令输出您的开放拉取请求列表及其状态。git spr update将您的提交推送到GitHub并为您创建拉取请求,因此您无需手动调用git push或在UI中手动打开拉取请求。

> git spr update [⌛❌✅❌] 60: Feature 3 [✅✅✅✅] 59: Feature 2 [✅✅✅✅] 58: Feature 1

要仅更新部分堆栈,请使用--count标志指定要更新的堆栈中的拉取请求数量。拉取请求将从堆栈底部向上更新。

修改提交

当您需要更新提交时,无论是修复测试、根据审查意见更新代码,还是仅仅因为想要更改,您都应该修改提交。 使用git amend可以轻松修改堆栈中任何位置的更改。暂存您想要修改的文件,然后不要调用git commit,而是使用git amend并在提示时选择您想要修改的提交。

> touch feature_2 > git add feature_2 > git amend 3 : 5cba235d : Feature 3 2 : 4dc2c5b2 : Feature 2 1 : 9d1b8193 : Feature 1 Commit to amend [1-3]: 2

合并状态位

每个拉取请求都有四个合并状态位,表示请求是否可以合并。要合并请求,所有必需的状态位都需要显示**✔**。每个状态位的含义如下:

  1. GitHub检查运行并通过
  • ⌛ : 待处理
  • ❌ : 某些检查失败
  • ✅ : 所有检查通过
  • ➖ : 合并不要求检查(可在yml配置中配置)
  1. 拉取请求批准
  • ❌ : 拉取请求尚未被批准
  • ✅ : 拉取请求已被批准
  • ➖ : 合并不要求批准(可在yml配置中配置)
  1. 合并冲突
  • ❌ : 提交有需要解决的冲突
  • ✅ : 提交没有冲突
  1. 堆栈状态
  • ❌ : 提交下面有其他无法合并的拉取请求
  • ✅ : 此提交以下的所有提交都可以合并

拉取请求批准和检查要求可以在配置文件中禁用,详情请参阅下面的配置部分。

显示当前拉取请求

使用git spr status查看您的拉取请求堆栈状态。在以下情况下,三个拉取请求都是绿色的,可以合并,一个拉取请求正在等待审查批准。

> git spr status [✅❌✅✅] 61: Feature 4 [✅✅✅✅] 60: Feature 3 [✅✅✅✅] 59: Feature 2 [✅✅✅✅] 58: Feature 1

合并拉取请求

您的拉取请求是堆叠的。不要使用GitHub UI来合并拉取请求,如果您按错误的顺序合并,可能会将一个拉取请求推入另一个,这可能不是您想要的。相反,只需使用git spr merge,您就可以一次性合并所有可合并的拉取请求。合并后的请求状态将在剩余的拉取请求之后打印。 为了一次性合并所有拉取请求而不触发额外的GitHub检查,spr会找到最顶层的可合并拉取请求。然后它将所有提交合并到这个拉取请求中,合并这个请求,并关闭其余的拉取请求。这一开始可能会有些意外,并且有一些副作用,但到目前为止还没有找到更好的解决方案。

> git spr merge 已合并 #58 功能1 已合并 #59 功能2 已合并 #60 功能3 [✅❌✅✅] 61: 功能4

要只合并部分堆栈,请使用 --count 标志加上您想要合并的堆栈中的拉取请求数量。拉取请求将从堆栈底部向上合并。

> git spr merge --count 2 已合并 #58 功能1 已合并 #59 功能2 [✅❌✅✅] 61: 功能4 [✅✅✅✅] 60: 功能3

默认情况下,合并使用变基合并方法,可以通过mergeMethod配置进行更改。

开始新的堆栈

开始新的堆栈是通过创建新分支实现的。例如,如果您想从当前分支的最新推送状态开始一个新的堆栈,使用 git checkout -b new_branch @{push}

配置

首次运行脚本时会创建两个配置文件。 仓库配置保存在仓库基础目录的 .spr.yml 文件中。 用户特定配置保存在用户主目录的 .spr.yml 文件中。

仓库配置类型默认值描述
requireChecks布尔true要求检查通过才能合并
requireApproval布尔true要求拉取请求获得批准才能合并
githubRepoOwner字符串GitHub所有者名称(从git远程配置获取)
githubRepoName字符串GitHub仓库名称(从git远程配置获取)
githubRemote字符串origin要使用的GitHub远程名称
githubBranch字符串main拉取请求目标的GitHub分支
githubHost字符串github.comGitHub主机,可以更新以用于GitHub企业版用例
mergeMethod字符串rebase合并方法,有效值:[rebase, squash, merge]
mergeQueue布尔false使用GitHub合并队列合并拉取请求
prTemplatePath字符串PR模板路径(例如 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md)
prTemplateInsertStart字符串在PR模板中搜索以确定正文插入起始位置的文本
prTemplateInsertEnd字符串在PR模板中搜索以确定正文插入结束位置的文本
mergeCheck字符串使用 'git spr check' 强制执行合并前检查
forceFetchTags布尔false运行 'git spr update' 时也获取标签
branchNameIncludeTarget布尔false在拉取请求分支名称中包含目标分支名称
showPrTitlesInStack布尔false在拉取请求正文的堆栈描述中显示PR标题
branchPushIndividually布尔false单独推送分支而不是原子式推送(仅在需要避免超时时启用)
用户配置类型默认值描述
showPRLink布尔true显示完整的拉取请求http链接
logGitCommands布尔true将所有git命令记录到标准输出
logGitHubCalls布尔true将所有GitHub API调用记录到标准输出
statusBitsHeader布尔true显示状态位类型标头
statusBitsEmojis布尔true使用花哨的表情符号显示状态位
createDraftPRs布尔false新建的拉取请求创建为草稿状态
preserveTitleAndBody布尔false更新拉取请求时不会覆盖PR标题和正文
noRebase布尔false为true时,spr update不会在原始分支之上变基

祝编码愉快!

如果您发现了bug,欢迎提出问题。欢迎提交拉取请求。

如果您觉得这个脚本和我一样有用,请添加一个星标并告诉您的GitHub伙伴。

许可证

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多