使用 statsmodels 代码¶
Github¶
The statsmodels 代码库托管在 Github。要贡献代码,您需要 注册一个免费的 Github 账户。
版本控制和Git¶
我们使用Git版本控制系统进行开发。 Git允许许多人同时在同一个项目上工作。简而言之,它允许你在其他人也可能在处理代码的情况下独立地对代码进行更改,并允许你轻松地将你的更改贡献到代码库中。它还保留了代码所有更改的完整历史记录,因此你可以轻松地撤销更改,或者查看更改是在何时、由谁以及为什么进行的。
要安装和配置 Git,并设置 SSH 密钥,请参阅 设置 Git。
要了解更多关于 Git 的信息,您可能想要访问:
下面,我们描述了为statsmodels贡献所需的最基本的git命令。
statsmodels Git/Github 工作流程¶
分叉和克隆¶
在设置好 git 之后,你需要 fork 主 statsmodels 仓库。为此,访问 statsmodels 项目页面 并点击 fork 按钮(参见 fork 一个仓库 的详细说明)。这将带你到你的 fork 页面。
然后,您希望将分支克隆到您的机器上:
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
#
推送你的更改¶
您可以随时将您的特性分支(以及任何更改)推送到您的 GitHub(fork)仓库,方法如下:
git push
虽然第一次你需要运行
git push –set-upstream origin shiny-new-feature
指示 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之前,最好在本地处理好它们。所以如果有疑问,不要推送。另请参阅关于保持历史记录清洁的建议,见合并与变基。
拉取请求¶
当你准备好请求代码审查时,我们建议你提交一个拉取请求。在此之前,你应该自己检查你的变更集。你可以通过在github上使用比较视图来完成这项工作。
导航到您在 GitHub 上的仓库。
点击分支列表
点击你的特性分支shiny-new-feature的比较按钮。
选择基础和比较分支(如有必要)。这将分别是主和闪亮的新功能。
从这里您将看到您的更改的概览。如果有任何不妥之处,您可以进行修正。
如果一切看起来正常,你就可以进行拉取请求了。
导航到您在 GitHub 上的仓库。
点击拉取请求按钮。
然后你可以点击提交和文件更改,以确保一切看起来都没问题。
在预览讨论标签中写下您更改的描述。
点击 发送拉取请求。
您的请求将会被审核。如果您需要返回并进行更多更改,您可以在您的分支中进行更改并推送到GitHub,拉取请求将会自动更新。
最后一点需要注意的是,如果在您开始修补工作后,上游/主分支中有很多工作,您可能需要进行变基。然而,如果这些更改与您在shiny-new-feature分支中所做的工作无关,您可能可以不用变基。如果可以避免,就不要变基。如果必须变基,尽量在更改结束时只进行一次。继续阅读以了解一些关于合并与变基的注意事项。
高级主题¶
合并与变基¶
这是一个已经进行了深入讨论并且有相当多专业知识的话题,远超过我们在这里所能提供的。本节将提供一些进一步阅读的资源和一些建议。不过,重点将放在那些希望为功能分支提交拉取请求的人身上。对于这些情况,应该优先使用rebase。
变基会将一个分支上的提交重放到另一个分支的顶部,以保持线性历史。回想一下,您的提交是针对您开始分支时的(可能)较旧版本的main进行测试的,因此如果您进行变基,可能会引入错误。然而,如果您只有几个提交,这可能不是一个太大的问题。开始学习变基的一个好地方是 无泪变基。特别是,注意警告。 即,在进行变基之前总是创建一个新分支。这是使用git工作时的一般良好建议。我还会补充永远不要对已经发布的工作使用变基。如果另一个开发人员正在使用您的工作,不要进行变基!!
关于合并,切勿将主干合并到你的特性分支中。不过,你需要检查你的工作是否能干净地合并到主干中。这将有助于评审人员。你可以在本地仓库中通过将你的工作合并到主分支(或任何跟踪远程主分支的分支)并运行测试来完成此操作。
删除分支¶
一旦你的特性分支被上游接受,你可能想要删除它。首先,你需要将上游主分支合并到你的分支中。这样,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