Git 和 GitHub 工作流程#
为 sktime
仓库贡献的首选工作流程是在 GitHub 上 fork 主仓库,克隆,并在一个新分支上进行开发。
工作流程由两个主要部分组成:
创建一个分支:这将在GitHub上设置您自己的``sktime``仓库副本。这只需要在您开始为``sktime``贡献时进行一次。
开发一个功能:这是开发一个新功能的过程,例如,修复一个错误或添加一个新的估计器。每次你想贡献一个新功能时,都会进行这个过程。
创建一个分支 - 初始一次性设置#
通过点击页面右上角的 ‘Fork’ 按钮来 Fork 项目仓库。这会在你的 GitHub 用户账户下创建代码的副本。关于如何 Fork 仓库的更多详情,请参阅 这个指南。
克隆 从您的GitHub账户将sktime仓库的分支克隆到您的本地磁盘:
git clone git@github.com:<username>/sktime.git cd sktime
其中
<username>
是你的 GitHub 用户名。配置并链接你的分支到上游仓库:
git remote -v git remote add upstream https://github.com/sktime/sktime.git
验证你为你的分支指定的新的上游仓库:
git remote -v > origin https://github.com/<username>/sktime.git (fetch) > origin https://github.com/<username>/sktime.git (push) > upstream https://github.com/sktime/sktime.git (fetch) > upstream https://github.com/sktime/sktime.git (push)
贡献一个功能 - 对于每一个新功能#
同步 你的 fork 的
main
分支与上游仓库:git fetch upstream git checkout main git merge upstream/main
从
main
分支创建一个新的特性分支,以保存你的更改,并使用描述性的名称,将<feature-branch>
替换为该名称:git checkout main git checkout -b <feature-branch>
始终使用
feature
分支。永远不要在main
分支上工作,这是一个好的实践!根据你的贡献来命名feature
分支。
备注
我们建议永远不要在你的fork的``main``分支上进行更改,并且总是为特定任务使用一个单独的专用分支。
在你的特性分支上开发你的贡献。使用
git add
添加更改的文件,然后使用git commit
提交文件以在 Git 中记录你的更改:git add <modified_files> git commit
完成后,使用以下命令将更改推送到您的GitHub账户:
git push --set-upstream origin my-feature-branch
按照 这些说明 从你的分支创建一个拉取请求。如果你的工作仍在进行中,请打开一个草稿拉取请求。
备注
我们建议尽早开启一个拉取请求,这样其他贡献者就能注意到你的工作,并能尽早给你反馈。
要添加更多更改,只需重复步骤 3 - 4。如果您将新更改推送到同一分支,拉取请求将自动更新。
在你创建了一个拉取请求到它准备好合并到
main
分支之间的时间里,sktime 仓库的main
分支可能已经被其他贡献者更新了新的更改,这可能会导致合并冲突。为了使你的特性分支与 sktime 仓库的main
分支保持同步,你可以执行以下操作:git fetch upstream git checkout main git merge upstream/main git checkout <feature-branch> git merge main
这将首先使用 sktime 仓库的
main
分支的最新更改来更新你 fork 的main
分支,然后使用这些更改来更新你的功能分支。如果有任何合并冲突,你需要手动解决它们。
管理分支 - 高级指南#
本节提供了一些关于管理多个分支的高级技巧。
并行处理多个功能#
如果你在并行处理多个没有相互依赖的任务:对于每个任务,从你的 fork 的 main
分支创建一个新的特性分支,遵循上面“贡献一个特性 - 对于每个新特性”部分的操作。
我们强烈建议不要将同一分支用于多个任务,因为这会使分支的历史变得混乱且难以审查,并且会大大增加错误和冲突的风险。
处理一系列依赖任务#
对于更复杂的任务,通过将任务链式连接起来以限制复杂性可能是有用的。
例如,在处理一个估计器时,首先需要合并一个错误修复。
在这种情况下,从上一个任务的分支创建一个新分支,并从那里继续你的开发。对于这种情况,请记得在PR描述中指定此PR依赖于前一个PR。
此外,每当对前一个分支进行更改时,请确保使用前一个分支的最新更改来更新依赖分支。
确保链中所有分支都保持最新的一般工作流程如下。假设我们有分支 A、B、C 等,其中 A 依赖于 main
,B 依赖于 A,C 依赖于 B,等等。
在任何分支发生任何更改后:
从上游仓库更新你的分支
将
main
合并到 A,并解决任何冲突将A合并到B中,并解决任何冲突
将 B 合并到 C 中,并解决任何冲突
等等,直到链中的所有分支都已合并并解决
清理#
一旦你的拉取请求被合并到 sktime 仓库的 main
分支中,你可以删除你的特性分支:
git checkout main
git branch -D <feature-branch>
你也可以删除你fork上的远程分支:
git push origin --delete <feature-branch>