Project Icon

revup

简化并行代码变更管理的开源工具

Revup是一个开源的命令行工具,旨在简化并行代码变更的管理过程。它可以自动创建和管理多个独立分支链,处理GitHub拉取请求,执行变基检测,并提供审查图和补丁集功能。通过优化代码审查流程,Revup帮助开发团队提高协作效率,适用于需要频繁并行开发的项目。

Revup

源代码 问题 Python 3.8 | 3.9 | 3.10 PyPI MIT许可证

Revup提供命令行工具,使开发者能够更快地迭代并行更改,并减少创建和维护代码审查的开销。

介绍动图

特性

  • Revup在后台为您创建多个独立的分支链,而不会触及您的工作树。然后,它为所有这些分支创建和管理GitHub拉取请求。
  • 拉取请求针对实际的基础分支,可以手动合并或通过持续集成合并。
  • 变基检测通过不重新推送未更改的补丁来节省时间和持续集成成本。
  • 从提交文本中添加审阅者、标签,并创建草稿。
  • 添加自动更新的"审阅图"和"补丁集"元素,使拉取请求更易于导航。
  • revup amendrevup restack通过替换缓慢的变基来节省时间。

兼容性

Revup需要Python 3.8或更高版本以及Git 2.43或更高版本。Revup适用于Linux、OSX和Windows(有限测试)。

按照这里的说明获取适用于您操作系统的最新Git版本。Revup使用仅在较新Git版本中存在的标志。

安装

使用pip或您喜欢的包管理器进行安装。

python3.8 -m pip install revup

通过显示帮助页面验证安装是否成功。

revup -h

您也可以从源代码构建以获取最新更新。

git clone https://github.com/Skydio/revup.git && cd revup
make deps && make package && make install

教程

本教程将指导您使用基本的revup功能。

首次设置

通过复刻 revup、创建新的仓库,或使用您拥有的其他仓库来克隆一个沙盒仓库。 创建测试PR可能会产生垃圾信息,所以不要在他人的仓库上进行教程。

git clone https://github.com/<your-name>/revup.git && cd revup

首次运行时,您需要配置GitHub凭证。在这里创建一个个人访问令牌, 并勾选"完整仓库权限"的复选框。Revup需要这个权限来创建和修改拉取请求。然后运行

revup config github_oauth

并将oauth复制粘贴到提示中。

创建独立的拉取请求

创建您的前两个提交,这将成为两个独立的拉取请求。 注意提交消息中的"Topic:"标签 - 这是revup识别和处理提交的方式。 每个单独命名的主题都将成为一个新的拉取请求。

echo meh > foo; git add foo
git commit -m "My first revup foo" -m "Topic: foo"
echo peh > bar; git add bar
git commit -m "My first revup bar" -m "Topic: bar"

revup upload

教程_1

您已上传了您的第一个revup更改!注意在GitHub中,两个分支都针对"main"。这允许它们独立合并。

在底层,revup为您创建并推送这些分支,根据需要跟踪和管理依赖关系。

创建相对拉取请求

现在我们将创建一个相对于"foo"的新审阅。"Relative"标签将确保新审阅针对正确的分支。

echo deh >> foo; git add foo
git commit -m "My second revup foo" -m "Topic: foo2" -m "Relative: foo"

revup upload

教程_2

使用这个简单而强大的模型,您可以一次性上传独立和相关的更改。

  • 多个提交可以在一个主题中,在这种情况下,它们都将在一个拉取请求中。
  • 同一主题中的提交不需要在历史记录中相邻。
  • 相互关联的主题不需要在历史记录中相邻,但第二个主题必须在第一个之后。

修改拉取请求

现在让我们更新一个拉取请求。

echo heh >> bar; git add bar
# 要么
revup amend HEAD~ --no-edit  # 指定要修改的提交
# 或者
revup amend bar --no-edit  # 指定要修改的主题名称

revup upload

教程_3

revup amend使修改历史记录中的提交变得容易。您还有其他选择来修改审阅:

  • 添加具有相同主题的新提交
  • 使用git rebase --interactivegit commit --amend

引入上游更改

使用git pull --rebase来引入更改。不要使用不带rebase的git mergegit pull,因为这会创建一个合并提交。

默认情况下,如果您拉取但未对提交进行更改,revup将不会上传。要覆盖此设置并始终上传,请运行revup upload --rebase

[pull]
    rebase = true
[rebase]
    autoStash = true

我们建议将上述内容添加到.gitconfig中,以使拉取和变基更容易。

更多功能

这是一些更方便的revup功能的非详尽介绍。

有关功能的完整描述,请参阅文档或运行revup -hrevup upload -hman格式查看文档。

使用复刻

对于您可能没有推送权限的项目贡献,可以配置revup推送到复刻,同时在主项目中创建拉取请求。

为原始仓库和复刻添加git远程。

$ git remote -v
origin  https://github.com/ORIGINAL_OWNER/REPO_NAME.git (fetch)
origin  https://github.com/ORIGINAL_OWNER/REPO_NAME.git (push)
myfork  https://github.com/YOUR_USERNAME/REPO_NAME.git (fetch)
myfork  https://github.com/YOUR_USERNAME/REPO_NAME.git (push)

上传时,将创建拉取请求的远程作为--remote-name传递,将复刻的远程作为--fork-name传递。

revup --remote-name origin --fork-name myfork upload

添加审阅者/标签

Revup还可以为拉取请求添加审阅者、受理人和标签。在主题的任何提交中添加适当的标签。

Reviewers: alice, bob
Assignees: eve
Labels: bug, feature, draft

GitHub用户名可以缩写,将匹配给定前缀的最短名称。

标签必须完全匹配。draft标签是特殊的,如果存在则会将拉取请求设为草稿,如果移除则会取消草稿状态。

在其他分支上工作

Revup通常会自动检测你的本地基础分支,并使用它来列出提交和目标审核。 你可以选择将任何特定主题指向另一个分支,甚至多个分支,这种情况下revup会将它们作为基础分支(在后一种情况下会创建多个拉取请求)。

针对多个分支的修复

主题:修复
分支:main, rel1.1

你也可以在命令行中指定基础分支,尽管这通常没有必要,除非你正在处理自动检测器不知道的分支(请参阅下面的仓库配置)。

revup upload --base-branch custom-branch-name

审核图和补丁集

Revup会在每个拉取请求中添加两条评论,为用户和审核者提供有用的功能。这些默认启用,并随着拉取请求的变化自动更新。

审核图提供了与当前拉取请求有相对关系的所有本地拉取请求的链接和标题,包括它所依赖的或依赖它的请求。这允许你快速浏览链式拉取请求。

补丁集表格提供了给定拉取请求的上传历史,以及每次上传之间差异的链接和摘要。值得注意的是,revup特别处理了重新基础(rebase)然后上传的情况,会显示一个不包含上游文件的差异。

配置revup

Revup可以使用标准配置文件格式进行高度定制。每个标志也是一个配置选项,因此用户可以获得他们需要的确切行为。

命令行上指定的标志优先级最高,其次是~/.revupconfig中的配置,再次是当前仓库中的.revupconfig

仓库配置

仓库内配置文件的主要用途是设置主分支和发布分支的命名。

例如,如果你的主分支是master,发布分支命名如rel1.1,请在仓库根目录的.revupconfig中提交以下内容。

[revup]
main_branch = master
base_branch_globs =
    rel[1-9].[0-9]
    rel[1-9].[0-9][0-9]

用户配置

位于~/.revupconfig的用户配置通过默认设置最常用的标志来节省时间。

例如,在熟悉工作流程后,用户可能不需要确认检查。添加以下行相当于使用--skip-confirm运行。

[upload]
skip_confirm = True

附录

基于提交的开发

(又称"堆叠差异"、"基于补丁"等)

如果你使用过Gerrit、Phabricator或git邮件列表等工具,你可能已经熟悉这种开发风格。如果你想了解更多,这里有一些关于这个主题的精心撰写的讨论。

同类项目

Revup的灵感部分来自这个非详尽的开源项目列表,这些项目也支持基于补丁的工作流:

  • ghstack:同样是与github集成的基于补丁的工具。revup基于这个项目的代码构建,特别是graphql的使用。
  • git-branchstack:创建类似于revup upload的分支,但不推送或创建审核。
  • git-revise:类似于revup amend,是上述工具的后端,具有处理冲突的合并系统。

贡献与支持

感谢你为revup做出贡献!你可以从自己的想法开始,或者查看问题页面,了解其他人感兴趣的想法。

报告问题时:

  • 检查问题跟踪器,看是否已经有人报告过。
  • 提供重现步骤的描述。
  • 如果可能,使用revup -v运行相同的命令,提供详细日志。

免责声明

Revup由Skydio发布,但不是Skydio的官方支持产品。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号