使用 statsmodels 代码

Github

statsmodels 代码库托管在 Github 上。 要贡献代码,你需要 注册一个免费的 Github 帐户

版本控制和 Git

我们使用 Git 版本控制系统进行开发。 Git 允许许多人协同工作在一个项目上。 简而言之,它允许你对代码进行更改,而不会影响其他可能也在处理该代码的人,并允许你轻松地将你的更改贡献到代码库。 它还保留了对代码的所有更改的完整历史记录,因此你可以轻松地撤消更改或查看更改何时、由谁以及为什么进行的。

要安装和配置 Git,以及设置 SSH 密钥,请参阅 设置 git

要了解更多关于 Git 的信息,你可能想访问

下面,我们将描述贡献给 statsmodels 所需的最低限度 git 命令。

statsmodels Git/Github 工作流程

分叉和克隆

设置 git 后,你需要分叉主 statsmodels 存储库。 为此,请访问 statsmodels 项目页面 并点击分叉按钮(有关详细信息,请参阅有关 分叉存储库 的说明)。 这将带你到你的分叉页。

然后,你需要将分叉克隆到你的机器上

git clone https://github.com/your-user-name/statsmodels
cd statsmodels
git remote add upstream https://github.com/statsmodels/statsmodels
git fetch --all

第三行设置了与上游 statsmodels 存储库的只读连接。 这将允许你定期使用上游的更改更新你的本地代码。 最后一条命令将获取你的存储库和上游 statsmodels 存储库。

创建分支

所有对代码的更改都应在功能分支中进行。 要创建一个分支,请键入

git checkout main
git rebase upstream/main
git checkout -b shiny-new-feature

前两行确保你从上游 statsmodels 存储库的最新版本开始。 第三行创建并签出一个新分支。

执行

git branch

将显示类似

* shiny-new-feature
  main

的内容,以表明你当前位于 shiny-new-feature 分支上。

进行更改

开始修改! 进行任何你想要的更改,但请确保你的分支中的工作完全局限于一个特定的主题、错误修复或功能实现。 你可以跨多个文件进行工作并拥有许多提交,但所有更改都应与功能分支的功能相关,无论该功能是什么。

现在假设你更改了文件 foo.py。 你可以通过键入以下命令查看你的更改

git status

这将打印类似

# On branch shiny-new-feature
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   relative/path/to/foo.py
#
no changes added to commit (use "git add" and/or "git commit -a")

的内容。 在你可以提交这些更改之前,你需要 添加暂存 这些更改。 你可以通过键入以下命令来执行此操作

git add path/to/foo.py

然后检查状态以确保你的提交看起来没问题

git status

应该显示类似

# On branch shiny-new-feature
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   /relative/path/to/foo.py
#

的内容。

推送你的更改

git push

你可以在任何时候将你的功能分支(以及任何更改)推送到你的 github(分叉)存储库,方法是

不过,第一次你需要运行

来指示 git 将当前分支设置为跟踪其在你的 github 存储库中的对应分支。

你可以通过以下命令查看远程存储库

git remote -v

如果你按照上面的说明添加了上游存储库,你将看到类似

origin  https://github.com/yourname/statsmodels.git (fetch)
origin  https://github.com/yourname/statsmodels.git (push)
upstream        https://github.com/statsmodels/statsmodels.git (fetch)
upstream        https://github.com/statsmodels/statsmodels.git (push)

的内容。 不过,在推送任何提交之前,强烈建议你确保你正在推送的内容有意义且看起来干净。 你可以通过以下命令查看你的更改历史记录

git log --oneline --graph

在将更改推送到 github 之前,最好先在本地处理它们。 因此,如有疑问,请不要推送。 另请参阅有关保持历史记录干净的建议,请参阅 合并 vs. 变基

拉取请求

当你准备好请求代码审查时,我们建议你提交一个拉取请求。 在你这样做之前,你应该自己检查你的更改集。 你可以使用 github 上的 比较视图 来完成此操作。

  1. 导航到 github 上的你的存储库。

  2. 点击 分支列表

  3. 点击你的功能分支 shiny-new-feature比较 按钮。

  4. 根据需要选择 基础比较 分支。 这将分别是 mainshiny-new-feature

  5. 在这里,你将看到你的更改的良好概述。 如果有任何问题,你可以修复它。

如果一切看起来都很好,你就可以 提交拉取请求

  1. 导航到 github 上的你的存储库。

  2. 点击 提交拉取请求 按钮。

  3. 然后,你可以点击 提交更改的文件 确保最后一次检查一切正常。

  4. 预览讨论 选项卡中写入你更改的描述。

  5. 点击 发送拉取请求

然后将审核你的请求。 如果你需要返回并进行更多更改,你可以在你的分支中进行更改并将它们推送到 github,拉取请求将自动更新。

还有一点需要注意。 如果自从你开始你的补丁以来,上游/main 中有很多工作,你可能需要变基。 但是,如果你所做的这些更改与你在 shiny-new-feature 分支中所做的工作无关,你可能会避免变基。 如果你能避免,那就不要变基。 如果你必须这样做,请尝试只做一次,并在你完成更改时进行。 请继续阅读有关 合并 vs. 变基 的一些说明。

高级主题

合并 vs. 变基

这是一个已经讨论了很长时间的话题,并且比我们在这里提供的专业知识更多。 本节将提供一些资源供进一步阅读,并提供一些建议。 但是,重点将放在希望为功能分支提交拉取请求的人身上。 在这些情况下,应优先使用变基。

变基会将一个分支上的提交重播到另一个分支之上,以保留线性历史记录。 请记住,你的提交是在你开始分支的(可能)较旧的 main 版本上测试的,因此如果你变基,可能会引入错误。 但是,如果你只有几个提交,这可能不是什么大问题。 学习变基的一个好地方是 轻松变基。 特别是,注意警告。 即,在进行变基之前,请务必创建一个新分支。 这是使用 git 的通用好建议。 我还要补充,不要对已发布的工作使用变基。 如果其他开发人员正在使用你的工作,请不要变基!

至于合并,永远不要从 trunk 合并到你的功能分支中。 但是,你需要检查你的工作是否可以干净地合并到 trunk 中。 这将有助于审阅者。 你可以在本地存储库中通过将你的工作合并到你的 main 分支(或跟踪远程 main 分支的任何分支)并 运行测试 来完成此操作。

删除分支

一旦你的功能分支被接受到上游,你可能想要将其删除。 首先,你需要将上游 main 合并到你的分支中。 这样,git 将知道它可以安全地删除你的分支

git fetch upstream
git checkout main
git merge upstream/main

然后,你只需执行以下操作即可

git branch -d shiny-new-feature

确保使用小写的 -d。 这样,如果你的功能分支实际上没有合并,git 会报错。 但是,该分支仍然存在于 github 上。 要删除 github 上的分支,请执行以下操作

git push origin :shiny-new-feature branch

最后更新:2024 年 10 月 3 日