拉取请求¶
您可以通过发出[拉取请求]为MkDocs的材料做出贡献 将由维护人员审查,并在以下情况下集成到主存储库中 所做的更改已获得批准。您可以贡献错误修复、更改 文档或您开发的新功能。
考虑拉取请求
在决定花精力做出改变和创造吸引力之前 请求,请讨论您打算做什么。如果您正在回复 如果你认为可能是一个bug,请先发布一份[bug报告]。如果你 打算处理文档,创建[文档问题]。如果你 想要开发新功能,请创建[更改请求]。
记住给出的指导,让别人给你建议。可能是这样 对于你所感知和想要解决的问题,有更简单的解决方案。 也许你想要实现的目标已经可以通过以下方式实现 配置或[定制]。
学习pull请求¶
Pull请求是一个由提供Git的服务在Git之上分层的概念 群众或部队的集合。在考虑发出pull请求之前,您应该熟悉 您可以使用我们正在使用的服务GitHub上的文档。这个 以下文章特别重要:
请注意,它们为不同的操作系统提供了量身定制的文档 以及与GitHub交互的不同方式。我们尽最大努力 此处的文档描述了适用于MkDocs材料的过程 但不能涵盖工具和做事方式的所有可能组合。 理解pull请求的概念也很重要 将军,然后继续。
拉取请求流程¶
下面,我们将描述发出pull请求的一般过程。这个 这里的目的是在稍后描述细节之前提供30000英尺的概述。
准备变更和起草PR¶
下图描述了存储库在 处理或准备拉取请求。我们将讨论审查修订 下面的过程。首先了解整个过程很重要 在您担心特定命令之前。这就是为什么我们之前先介绍这个 提供以下说明。
sequenceDiagram
autonumber
participant mkdocs-material
participant PR
participant fork
participant local
mkdocs-material ->> fork: fork on GitHub
fork ->> local: clone to local
local ->> local: branch
loop prepare
loop push
loop edit
local ->> local: commit
end
local ->> fork: push
end
mkdocs-material ->> fork: merge in any changes
fork ->>+ PR: create draft PR
PR ->> PR: review your changes
end
-
第一步是为MkDocs创建一个Material分支 存储库,无论是[mkdocs material]还是[mkdocsmaterial insider] (仅限赞助商使用)。这为您提供了一个存储库 可以将更改推送到。请注意,不可能有多个fork 在任何时间点访问给定的存储库。所以,你创建的叉子将是 *你的叉子。
-
制作完成后,将其克隆到本地计算机上,以便开始工作 您的更改。
-
所有贡献都应该通过一个“主题分支”进行,其名称如下 描述正在进行的工作。这允许您拥有多个工件 正在进行的工作,如果您使用的是公共版本 向其他人清楚地表明,所包含的代码正在进行中。主题 分支将相对短暂,并在最后消失,当 您的更改已合并到代码库中。
-
如果你打算进行任何代码更改,而不是继续工作 仅提供文档,您需要[设置开发 环境](#建立发展环境)。
-
接下来是进行编辑的迭代过程,将它们提交给您的 克隆。请以合理的大块形式提交,构成一项工作 而不是一次性完成所有事情。
记住,细粒度的增量提交要容易得多 审查中涉及的文件很多,变化很大。 尽量保持更改尽可能小和本地化,并保持 提交时记住审阅者。特别是,一定要写 有意义的提交消息。
-
定期把你的工作推到叉子上。
-
您还应该关注MkDocs材料存储库中的更改 你克隆了。如果你工作需要一段时间,这一点尤其重要。拜托 尝试将任何并发更改合并到您的fork和分支中 定期。在创建拉取请求之前,您*必须*至少执行一次此操作, 所以,让你的生活更轻松,更频繁地这样做,以尽量减少 冲突的变化。
-
一旦你很高兴你的变化处于一种你可以描述的状态 在“草稿”拉取请求中,您应该创建这个。确保 参考之前任何引起你工作的讨论或问题。 创建草稿是从“早期”获得工作反馈的好方法 维护者或其他人。您可以在以下时间点明确请求审核 我认为这很重要。
-
像审阅者一样审阅你的工作,并解决你的工作中的任何问题 到目前为止的工作。批判性地查看您更改的文件的差异。 特别要注意变化是否尽可能小 以及您是否遵循了项目中使用的通用编码风格。 如果您收到了反馈,请根据需要迭代该过程。
您应该选择一些项目来测试您的更改。你应该 一定要确保这些变化不会破坏建筑 MkDocs材料文档,您可以在“文档”中找到` 文件夹。您可能还想确保以下相关示例 [示例存储库]仍然构建良好。
定稿¶
一旦你对你的更改感到满意,你就可以进入下一步,完成 您的pull请求并要求进行更正式和详细的审查。图表 下图显示了该过程:
sequenceDiagram
autonumber
participant mkdocs-material
participant PR
participant fork
participant local
activate PR
PR ->> PR : finalize PR
loop review
loop discuss
PR ->> PR: request review
PR ->> PR: discussion
local ->> fork: push further changes
end
PR ->> mkdocs-material: merge (and squash)
deactivate PR
fork ->> fork: delete branch
mkdocs-material ->> fork: pull
local ->> local: delete branch
fork ->> local: pull
end
-
当你为自己所做的改变做出的贡献感到高兴时 维护人员可以集成到代码库中,完成pull 请求。这向所有认为工作“完成”的人发出信号,表明 可以进行审查,以期接受和整合它。
-
向维护者请求审查,@squidfunk。
-
维护人员可能会对您的代码发表评论,您应该与他们讨论 他们。执行此操作时请记住,维护人员可能会有不同的 与你的观点相比。他们往往需要更长的时间 在未来几年内,当你可能需要的时候,维护项目的前景 更专注于您所处理的具体问题或功能。请保持 讨论始终保持尊重。
值得注意的是,并非所有拉取请求都被合并到 代码库。原因可能各不相同。这项工作可能会揭示其他问题 阻止拉取请求的集成。有时它有助于发现更好的方法 做事情或表明需要一种更通用的方法。这一切都是 即使没有具体的变化,也能很好地帮助项目进展, 最终被接受。
-
通过将请求的更改提交到本地克隆来进行更改 将它们推到你的叉子上。这将自动更新拉取请求。 很可能需要几次迭代才能使你的贡献达到可接受的水平 国家。您可以通过仔细阅读评论和 小心地做出改变。
-
一旦审阅者对更改完全满意,他们就可以合并它们 进入主分支(或“master”)。在这个过程中,他们可能会“挤压”你的 一起提交到较少数量的提交中,并可以编辑消息 这描述了他们。恭喜你,你现在已经为这个项目做出了贡献 并且应该看到您名下主分支的变化。
-
现在,您可以删除fork和本地存储库,然后重新开始 下次吧。或者,您可以保留存储库和本地克隆 周围,但重要的是要让它们与上游保持同步 任何后续工作的存储库。我们建议您从删除开始 你叉子上用的树枝。
-
为了确保你有你所做的更改,从主目录中提取它们 将存储库添加到fork的主分支中。
-
同样,从本地克隆和中删除主题分支。..
-
将更改拉到其主分支。
一步¶
现在概述了整个过程,以下是具体的说明和 提示。在描述一个过程时,有很多选择要做 通过pull请求为项目做出贡献。在下文中,我们假设 您正在使用Git命令行工具。对于大多数替代方案(例如 使用IDE或使用通过GitHub web界面提供的功能), 命令行指令的翻译应该足够简单。我们 只会在真正必要的情况下添加注释,以保持其复杂性 合理的水平。
分叉存储库¶
要更改MkDocs的Material,您需要首先分叉其中一个 GitHub上的仓库。这是为了让你在GitHub上有一个存储库 您可以将更改推送到(只有维护者和合作者有写权限 到原始存储库)。
如果你想对以下内容进行更改,请分叉[公共版本的存储库] 公共版本中的代码,或者如果您想对 文档。通过以下方式更改存储库的名称是个好主意 附加“-fork”,这样遇到它的人就知道他们已经找到了 临时分叉,而不是项目的原始或永久分叉。 您可能还想添加一个说明,阐明存储库的用途。
为了对仅在Insiders版本中可用的功能进行更改, fork[内部人员存储库]。请注意,分叉将是一个私有存储库。 请尊重[内幕人士计划条款]和 用于维护和开发MkDocs材料的赞助软件方法。
建立开发环境¶
从现在开始,请按照[设置说明 发展环境]。他们将带您完成设置过程 您可以在其中进行更改并查看/测试它们的环境。
进行更改¶
当您对代码或文档进行更改时,请按照 项目中使用的既定风格。这样做可以提高可读性和 也有助于让那些将查看拉取的人更容易阅读差异 请求。避免进行任何大规模的样式更改,例如询问IDE 重新格式化所有代码。
仔细研究你正在修改的代码,以确保你完全理解 在你试图改变它之前,它是如何工作的。这不仅可以帮助你解决 您试图解决的问题,但也要尽量减少创建的风险 意外的副作用。
致力于某个分支¶
拉取请求的开发最好在与主题分支分离的主题分支中完成 主分支。使用
git switch-c
当你想将commits推送到你的fork时,你可以用 git push-u origin<name>
。“-u”参数是 --set upstream,使新创建的分支“跟踪”该分支 在你的fork中使用相同的
pull
和push
命令 默认情况下,将与您的fork中的该分支对抗。
合并并发更改¶
如果你所做的工作需要一些时间,那么改变的可能性就会增加 当您工作时,将其添加到主存储库。设置可能是个好主意 将MkDocs的原始材料存储库升级为“上游”存储库 您的本地克隆。
这可能是它的样子:
$ git remote -v
origin git@github.com:<your_username>/mkdocs-material-fork.git (fetch)
origin git@github.com:<your_username>/mkdocs-material-fork.git (push)
$ git remote add upstream https://github.com/squidfunk/mkdocs-material.git
$ git remote -v
origin git@github.com:alexvoss/mkdocs-material-fork.git (fetch)
origin git@github.com:alexvoss/mkdocs-material-fork.git (push)
upstream https://github.com/squidfunk/mkdocs-material.git (fetch)
upstream https://github.com/squidfunk/mkdocs-material.git (push)
完成此操作后,您可以从上游提取任何并发更改 将存储库直接导入您的克隆中,并在那里进行任何必要的合并,然后推送 您需要明确指出哪个远程存储库 你想在执行“pull”操作时使用:
这会将“master”分支中的更改提取到主题分支中并合并 他们。
测试和审查变更¶
在提交任何更改之前,您应该确保它们按预期工作 并且不会产生任何意外的副作用。你至少应该测试一下 这三个[烟雾测试]:
-
MkDocs本身的材料文件。如果您设置并运行 [设置说明]中概述的开发环境 开发环境],“mkdocs-serve”应持续运行 构建文档。检查是否没有错误消息,理想情况下, 无(新)警告。
-
对代表问题的项目进行测试,或对新开发项目进行测试 功能。如果您已经提交了错误报告并创建了 a[最小复制]。如果你正在开发一个新功能,那么你可能需要 构建一个项目作为测试套件。它可以兼作文档 展示了新功能的工作原理。
-
使用[MkDocs示例材料]中的相关示例进行测试 存储库。请注意,要一次性构建所有示例,您需要这些项目 来自Insiders的插件,但您始终可以单独构建示例 使用公共版本。
-
理想情况下,还可以在[示例存储库]中测试示例。如果你是 在制作MkDocs的Insiders版材料时,您可以简单地开始 在顶层构建,[projects插件]将构建所有示例 为你。如果你使用的是公共版本,你需要构建每个 单独的子项目。我们意识到,这是一个不断增长的收藏 示例,您可能希望优先考虑与主题最相关的示例 您更改的功能。
创建pull请求¶
最初,将pull请求**创建为草稿**。你这样做[通过 GitHub提供的各种接口]。你使用哪一个完全取决于 你。我们没有提供使用GitHub接口的具体说明 提供所有必要的信息。
承诺、信息、错误和“挤压”¶
删除分支¶
一旦拉取请求被合并到物料的主分支中 对于MkDocs存储库,您应该从fork中删除分支 GitHub和您计算机上的本地克隆。这避免了可能 对发展状况的困惑。
首先,用git switch master切换回master分支,然后 使用git branch-d<name>
删除用于PR的分支。
后续拉取请求¶
重要的是,后续的拉取请求是从最新的 “大师”分支的历史。实现这一点的一种方法是删除fork 下次再换一个全新的开始。
如果你更频繁地为MkDocs的材料做出贡献,或者只是碰巧 连续执行两个或多个pull请求,您也可以确保 同步你的fork(使用GitHub UI)并将其拉入你的本地 存储库。因此,只需删除您创建的主题分支(本地和中 你的fork)并从主存储库的“master”分支拉入你的 `在开始处理新的pull请求之前,先执行master分支。
注意事项¶
-
Don't 只需创建一个包含未解释的更改的pull请求。
-
Do 在讨论中讨论你打算和别人做什么,以便 在编写或修改代码之前,任何更改的合理性都是明确的。
-
Do 链接到讨论或任何问题,为拉取提供背景 请求。
-
Do 如果你对任何事情都不确定,可以问问题。
-
Do 问问自己,你所做的事情是否对更广泛的社区有益 使Material for MkDocs成为更好的产品。
-
Do 问问自己,做出改变的成本是否很高 与它们将带来的好处有关。一些明智的改变可以 为了相对较小的收益而增加复杂性,可能会破坏现有的行为 或者在需要进行其他更改时可能很脆弱。
-
Do 经常合并并发更改,以尽量减少 可能难以解决的冲突变化。