跳转到主要内容

在git分支上管理一摞补丁

项目描述

git-pile

在git分支上管理一摞补丁

需求

  • Python >= 3.7
  • git >= 2.20
  • Python模块
    • argcomplete(可选,用于shell自动完成)
    • coverage(可选,用于测试)

快速入门

运行git-pile

git-pile遵循git二进制命名约定,因此我们可以将其用作git的子命令。以下任一形式在git-pile在搜索PATH中时都有效

$ git pile -h
$ git-pile -h

为了使自动完成工作,您需要安装Python的argcomplete模块。在第一种情况下,您还需要源bash自动完成文件extra/git-pile-complete.sh,以便git知道如何完成子命令。

您还可以将git-pile作为Python包安装,尽管这仍然不推荐,因为它经常更新。

$ ./setup.py install

或者

$ ./setup.py install --user

如果命令行中提供了--user选项,它将在$HOME目录下安装,bash自动完成文件将在$XDG_DATA_HOME/git-pile/bash_completion。我们没有标准的bash自动完成用户目录可以安装,因此用户应该源此文件。

仓库初始化

初始化一个新的空摞

$ git pile init

现在您有一个(孤立)的摞分支,用于跟踪要管理的补丁文件。分支名称可以通过git pile init的选项更改。与git init创建一个新的仓库类似,git pile init将创建一个新的摞。

或者,如果摞分支已经存在于远程仓库(甚至本地)中,并且您想设置您的工作树使用它,您应该使用下面的命令

$ git pile setup internal/pile internal/embargo-branch

在上面的示例中,我们有一个名为 internal 的远程分支,它包含名为 pile 的分支,其中包含补丁文件,以及一个名为 embargo-branch 的分支,该分支将在我们应用补丁时生成。

第二个参数是可选的,如果未提供,将使用当前分支。

开发新的提交并发送到邮件列表

您可以使用正常的git flow在项目中开发更改并创建提交。以下是一个示例,但并不限于git-pile

$ git checkout -b newfeature internal/embargo-branch
$ echo "platform 16" >> platforms.txt
$ git add platforms.txt
$ git commit "add new platform"

从初始化示例继续,我们创建一个新的分支,以 internal/embargo-branch 作为基础。结果可以像 git format-patch 一样准备发送到邮件列表

$ git pile format-patch -o /tmp/patches
/tmp/patches/0000-cover-letter.patch
/tmp/patches/0001-add-new-platform.patch

封面信将包含到 pile 分支的 diff(包括添加的补丁等),而补丁文件也将单独提供:这些是到结果分支的 diff,并提供以简化审查。

如果您要添加的提交不应该在顶部,而是在长期运行的补丁系列中间,您可以使用 git rebase -i 将它向下移动。以下示例中,我们将它向下移动10个提交

$ git rebase -i -11

  [ editor opens and you move the commit around. You can also reorder
    commits, edit commit message, etc, etc. Anything you do in an
    interactive rebase you can do here ]

$ git pile format-patch -o /tmp/patches
/tmp/patches/0000-cover-letter.patch
/tmp/patches/0001-old-platform.patch
/tmp/patches/0002-old-platform-2.patch
/tmp/patches/0003-add-new-platform.patch

任何需要更改以适应系列中间补丁的补丁都将由 git pile format-patch 准备。

从更改的树生成 pile

您可以将分支的更改转换为 pile 分支中维护的物理补丁,而不是发送到邮件列表。

$ git pile genpatches master..newfeature
$ cd patches
$ git add -A
$ git commit -m "add platform"
$ git pile genbranch

这会生成补丁,保存补丁系列中的最终状态,然后重新创建本地 embargo-branch。补丁可以重新排序,添加到中间,重新措辞等。通过执行 genpatches + genbranch 循环,我们总是可以重新生成分支并保持更改的历史,即保持补丁如何更改/添加/删除的历史。

将补丁系列应用到 pile

git-pile 生成的补丁系列中的封面信(即由 git pile format-patch 生成的)总是包含从树的原状态到当前状态的 diff。它可以用来通过定位补丁目录而不是正常工作目录来应用整个系列。

$ # machine 2
$ cd pile
$ git am /tmp/patches/0000-cover-letter.patch
$ git genbranch

这将应用接收到的整个系列(即使它是10个补丁系列,也只需要应用特别格式化的封面信)。

销毁 pile

如果出现任何问题并且您想从头开始,可以调用 destroy 命令。这将删除 git-pile 保存的所有配置,pile 分支本身以及它使用的 worktree 目录。如果您有补丁的备份(无论是手动备份还是 pile 分支在远程存储库中),这样做是相当安全的,并且允许您重新配置。

项目详情


下载文件

下载适合您平台的可执行文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码发行版

git_pile-1.3.tar.gz (78.4 kB 查看哈希值)

上传时间 源代码

构建发行版

git_pile-1.3-py3-none-any.whl (65.5 kB 查看哈希值)

上传于 Python 3

由支持