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 次下载
93KB
2K SLoC
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 add
和git 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
应显示 base
和 series
已修改;运行 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