Git 和 GitHub 工作流程#

sktime 仓库贡献的首选工作流程是在 GitHub 上 fork 主仓库,克隆,并在一个新分支上进行开发。

工作流程由两个主要部分组成:

  • 创建一个分支:这将在GitHub上设置您自己的``sktime``仓库副本。这只需要在您开始为``sktime``贡献时进行一次。

  • 开发一个功能:这是开发一个新功能的过程,例如,修复一个错误或添加一个新的估计器。每次你想贡献一个新功能时,都会进行这个过程。

创建一个分支 - 初始一次性设置#

  1. 通过点击页面右上角的 ‘Fork’ 按钮来 Fork 项目仓库。这会在你的 GitHub 用户账户下创建代码的副本。关于如何 Fork 仓库的更多详情,请参阅 这个指南

  2. 克隆 从您的GitHub账户将sktime仓库的分支克隆到您的本地磁盘:

    git clone git@github.com:<username>/sktime.git
    cd sktime
    

    其中 <username> 是你的 GitHub 用户名。

  3. 配置并链接你的分支到上游仓库:

    git remote -v
    git remote add upstream https://github.com/sktime/sktime.git
    
  4. 验证你为你的分支指定的新的上游仓库:

    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)
    

贡献一个功能 - 对于每一个新功能#

  1. 同步 你的 fork 的 main 分支与上游仓库:

    git fetch upstream
    git checkout main
    git merge upstream/main
    
  2. main 分支创建一个新的特性分支,以保存你的更改,并使用描述性的名称,将 <feature-branch> 替换为该名称:

    git checkout main
    git checkout -b <feature-branch>
    

    始终使用 feature 分支。永远不要在 main 分支上工作,这是一个好的实践!根据你的贡献来命名 feature 分支。

备注

我们建议永远不要在你的fork的``main``分支上进行更改,并且总是为特定任务使用一个单独的专用分支。

  1. 在你的特性分支上开发你的贡献。使用 git add 添加更改的文件,然后使用 git commit 提交文件以在 Git 中记录你的更改:

    git add <modified_files>
    git commit
    
  2. 完成后,使用以下命令将更改推送到您的GitHub账户:

    git push --set-upstream origin my-feature-branch
    
  3. 按照 这些说明 从你的分支创建一个拉取请求。如果你的工作仍在进行中,请打开一个草稿拉取请求。

备注

我们建议尽早开启一个拉取请求,这样其他贡献者就能注意到你的工作,并能尽早给你反馈。

  1. 要添加更多更改,只需重复步骤 3 - 4。如果您将新更改推送到同一分支,拉取请求将自动更新。

备注

如果以上任何内容对你来说像是魔法,请查阅 Git 文档。如果你遇到困难,可以在 Discord 上与我们聊天,或者加入 Discord 上的社区会议。

  1. 在你创建了一个拉取请求到它准备好合并到 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,等等。

在任何分支发生任何更改后:

  1. 从上游仓库更新你的分支

  2. main 合并到 A,并解决任何冲突

  3. 将A合并到B中,并解决任何冲突

  4. 将 B 合并到 C 中,并解决任何冲突

  5. 等等,直到链中的所有分支都已合并并解决

清理#

一旦你的拉取请求被合并到 sktime 仓库的 main 分支中,你可以删除你的特性分支:

git checkout main
git branch -D <feature-branch>

你也可以删除你fork上的远程分支:

git push origin --delete <feature-branch>