14个版本

使用旧的Rust 2015

0.9.1 2016年11月21日
0.9.0 2016年11月21日
0.8.11 2016年10月31日
0.8.10 2016年8月19日
0.8.7 2016年7月29日

#174 in 电子邮件

每月 31 次下载

MIT 许可证

93KB
2K SLoC

git series 跟踪补丁系列随时间的变化。git series 还跟踪补丁系列的封面信,格式化系列以供电子邮件使用,并准备拉取请求。

git-series 的手册页

关于git-series

补丁系列通常在提交之前经过多次迭代;从想法到RFC再到 [PATCHv12 1/8] 的路径包括多次调用 git rebase -i。然而,尽管Git很好地跟踪和组织提交,但它实际上并没有跟踪补丁系列的变化,除了瞬时的reflog之外。这使得在补丁系列、分发包、回滚或其他包含rebase或非fast-forward开发的开发过程中进行协作变得具有挑战性。

通常,跟踪补丁系列随时间的变化需要将版本控制的一部分移出git。您可以将补丁系列从git移到quilt或分发包中,然后使用git对补丁文件进行版本控制,从而失去git工具的功能。或者,您可以将补丁系列保留在git中,并通过多个命名分支进行版本控制;然而,像feature-v2、feature-v3-typofix和feature-v8-rebased-4.6-alice-fix这样的名称听起来像是企业电子邮件的文件名,而不是现代版本控制的名称。而且无论如何,git都没有跟踪您的封面信。

git-series 在同一git存储库中跟踪补丁系列及其演变。git-series 完全使用现有的git功能,允许git将系列推送到任何git存储库,与其他分支和标签一起。git-series 还跟踪补丁系列的封面信,格式化系列以供电子邮件使用,并准备拉取请求。

随着您更改补丁系列,git-series 可以显示版本之间的差异,找到并显示每个提交的旧版本和新版本之间的对应关系,即使在更改或rebase这些提交之后也是如此。系列差异格式以并排方式显示对应的旧版本和新版本提交,并对修改后的提交进行间差异。

构建和安装

git-series是用Rust编写的。您需要安装Rust和Cargo才能构建它。如果您的操作系统发行版包含Rust和Cargo的软件包,请先安装它们(例如,在Debian上,apt install rustc cargo)。如果您的发行版没有Rust和Cargo的软件包,或者有旧版本(这可能会导致构建错误),您可以从rust-lang.org下载页面的稳定版本的Rust和Cargo下载。

安装Rust和Cargo后,您可以使用以下命令下载和安装git-series的最新版本:

cargo install --root ~/.local git-series

这将把git-series安装到~/.local/bin/git-series。如果您还没有在您的~/.local/bin上添加,您可能需要将其添加到那里,或者更改--root。您可能还想将包含的manpage git-series.1安装到~/.local/share/man/man1/git-series.1

如果您想为您自己的发行版打包git-series,请与我联系。

命令概述

  • 使用git series start seriesname来启动一个补丁系列seriesname。

  • 使用git series base somecommit来设置系列的基提交。 (这是您基于系列的基础提交,而不是系列中的第一个补丁。)

  • 使用正常的git命令提交更改。

  • 使用git series rebase -i来帮助重构或重新组织补丁系列。

  • 使用git series status来检查更改。

  • 使用git series diff来显示补丁系列的更改,以diff的形式。

  • 使用git series cover来添加或编辑一封封面信。

  • 使用git series addgit series commit(或git series commit -a)来提交补丁系列的更改。您可以在更改基或封面信,或者更改HEAD到一个新提交时进行此操作。在您对补丁系列进行语义更改并希望记录时,请进行系列提交,例如在新的上游版本上重构,重新组织补丁或整合反馈。

  • 使用git series format来准备通过电子邮件发送的补丁系列,或使用git series req来准备“请拉取”邮件(在将更改作为分支或标签推送到仓库后)。

工作流程示例

假设您想为一个项目编写一个实现新功能的补丁系列。您已经有一个本地的代码库 git clone。您可以为此补丁系列创建一个分支,但上游可能需要多次迭代才能接受,并且您可能需要使用变基或修改提交来修复提交;分支无法跟踪这些。使用 git-series,您将像通常一样开发补丁系列,包括变基,并定期使用 git series commit 将补丁系列的状态提交,包括解释您更改的提交信息。即使您变基补丁系列或进行其他不快进的操作,git-series 也会使用一个确实快进的分支来跟踪这些更改,因此您可以轻松地分享和审查补丁系列的历史。

开发或导入第一个版本

要开始补丁系列,首先运行 git series start featurename。这里的 featurename 指定了系列的名称,就像您指定分支的名称一样。

补丁系列需要一些基础来构建,这标识了您想要从其开发的上游提交。这将成为您系列中第一个补丁的父提交。如果您想基于当前版本构建补丁系列,请运行 git series base HEAD。如果您想基于其他提交构建此补丁系列,例如一个发布版本,首先使用 git checkout thecommit 检出该提交,然后运行 git series base HEAD

然后您可以像往常一样开发补丁系列,使用 git 提交补丁。

如果您已经开始补丁系列并进行了某些提交,您仍然可以将补丁系列的当前版本采用到 git-series 中。找到系列中第一个补丁的父提交,然后运行 git series base thatcommit

git 一样,您可以在任何时候运行 git series status 来查看系列的当前状态,包括您可能想要提交的更改以及要运行的下一步。执行上述步骤后,git series status 应显示 baseseries 已修改;运行 git series base 设置“工作”版本中的 base,而工作版本中的 series 总是指向 HEAD(您已签出的当前 git 提交)。

现在你已经编写了补丁系列的初始版本(或者在你开始使用git-series之前就已经编写了它),你可以将这个版本提交给git-series。运行git series commit -a来提交系列。这将运行你的编辑器,以便你可以提供系列提交消息(例如,“功能初始版本”或“将功能导入git-series”)。

如果你的补丁系列包含多个补丁,你可能需要添加一封封面信。运行git series cover来编辑封面信,然后运行git series commit - - '添加封面信'将此更改提交到系列。

现在你已经有了补丁系列的第一个版本,你可以使用git series format将其格式化为一系列电子邮件。

开发v2

您通过电子邮件发送补丁系列,并从维护者那里获得反馈:概念看起来不错,但您需要将其中一个补丁拆分为两个,并在另一个提交的提交消息中添加基准测试结果。

运行git series rebase -,并拆分提交(将其标记为‘e’dit,重复运行git reset - HEAD^,然后多次运行git add -git commit,然后运行git rebase --continue)。然后,将此更改提交到系列:git series commit - - '将X更改拆分为单独的补丁'

然后,再次运行git series rebase -以添加基准测试结果(将提交标记为‘r’eword),然后提交此更改:git series commit - - '添加基准测试结果'

您可能想记录附信中的更改:运行 git series cover,记录更改,并运行 git series commit -a -m 'Update cover letter for v2'。(或者,您可以在每次更改系列时逐步添加到附信。)

现在您有了补丁系列的 v2 版本,您可以使用 git series format -v 2 将其格式化为一系列新电子邮件。

依赖项

~13MB
~289K SLoC