阅读本指南,如果
指南的假设
本指南假设您:
贡献过程始于您想要修复的错误或您想要实现的想法。如果你没有,请随意挑选一张不定期的票github.com/matomo-org/matomo/milestones.
一旦你决定了什么,继续下面的内容。
Matomo问题跟踪器中的大多数问题都是Matomo团队想要实现或解决的想法和错误。然而,情况并不总是如此,Matomo团队可能对某些问题不再感兴趣,即使它们仍然是开放的。
在你花时间研究一个bug或想法,并冒着最终可能无法合并的风险之前,强烈建议你这样做你首先在这个问题上留下评论,并解释你有兴趣为这个问题做出贡献.在你的评论中也要解释你计划如何解决bug或创建新功能,并要求团队对你的计划进行快速验证。这使Matomo团队有机会审查您的提案,以及他们是否希望将其添加到Matomo中,并尽早为您提供指导。团队将在问题中回复你,一旦他们确认,然后你就可以自信地处理这个问题,并努力打开一个Pull Request。
在你开始贡献之前,你需要先做好准备git&GitHub.如果需要,你可以在这里创建一个GitHub帐户.
如果你是Matomo核心开发人员,那么你有写Matomo存储库的权限,因此你不需要分叉Matomo,可以跳过以下步骤。而是克隆Matomo库然后直接推到它。这将简化您的许多工作。
登录GitHub时,访问Matomo的库.在右上角有一个叉按钮。点击它。Github将复制存储库到您的帐户。这个副本(或分支)是您将要处理的。如果你不知道叉子,请阅读更多有关叉子的知识GitHub上的叉子.
提交时,git需要知道你的用户名和电子邮件。使用如下命令设置。
git配置——全局用户。电子邮件john@example.com
克隆你的Matomo叉子(替换myusername
GitHub用户名):
Git克隆https://github.com/myusername/piwik
这将把整个分叉存储库(包括所有历史记录)复制到piwik文件夹在你的机器上。
现在,我们将运行另一个命令,以便git记住原始的Matomo存储库和你的fork:
Git远程添加上游https://github.com/matomo-org/matomo
这样可以节省https://github.com/matomo-org/matomo作为一个遥控器,并命名它上游.
贡献不应该产生PHP错误或警告。将以下设置应用于您的php . ini
文件将使您能够捕捉这些错误:
display_errors = On error_reporting = E_ALL | E_STRICT
Matomo使用运行Matomo所需的各种库。虽然它们包含在官方发布中,但那些依赖关系需要在从Git签出时手动安装。要安装所需的要求下载/安装编写器在“Matomo”目录下执行以下命令。
作曲家安装
现在您已经有了最新的Matomo源代码的副本,可以开始修改它了。在本节中,我们假设您发现了一个bug并希望修复它。
参见我们的指南使用git创建一个新分支.
一旦你创建了一个分支,你就有了一个可以开始工作的地方。这部分过程没有什么特别之处,只需修复bug或完成你正在开发的功能即可。
如果您正在处理比错误修复更复杂的事情,您可能需要使用来自主存储库的更改来更新您的新分支。让您的分支保持最新是一个两步过程。
首先,在你的5. x-dev分支,从主Matomo存储库中获取更改,昵称为上游:
Git上拉5.x-dev
然后,在新的分支上(错误修复对于本教程),与合并5. x-dev:
Git合并5.x-dev
如果有冲突,您可以阅读本指南:如何解决Git冲突.
现在您已经完成了错误修复或新特性(或只是其中的一部分),是时候提交您的更改并将其推到您的分支(the fork)起源
远程)。
git add ModifiedFile.php AnotherFile.js git commit -m '添加新功能:XYZ(替换为描述性提交消息)' git推送
你可以阅读本指南了解如何提交更改。你可以阅读本指南了解如何推提交。
在分支中,经常且有规律地提交是可以的。之后,当PR将被合并时,我们总是压缩PR,这意味着它将只成为一个提交,PR标题将成为提交消息,如果需要,PR将被链接以查找关于提交的更多信息。这意味着单独的提交消息不是很重要,但仍然很有用。
既然已经推动了更改,现在是时候合并更改了。要了解更多,请阅读我们的拉请求和评论指南.
每次你改变分支时,你可能需要运行composer install(也可能是npm install)。您可以通过以下步骤自动化此任务:
. / / compile.sh hook
包含以下内容#!/bin/bash changedFiles="$(git diff-tree -r——name-only——no-commit-id ORIG_HEAD HEAD)" runOnChange() {echo "$changedFiles" | grep -q "$1" && eval "$2"} runOnChange包锁。runOnChange composer. json "npm install"锁定“composer install”
Chmod +x .git/hooks/compile.sh
. / / post-checkout hook
. / / compile.sh hook
它只会在作曲家或npm实际改变时执行。
当版本增加并且有更新时,UI/API会自动让你知道迁移更新需要执行。UI将直接显示更新屏幕,并要求您执行任何未完成的迁移更新。API将返回一条错误消息,指出有一个更新可用,然后您需要打开UI来执行此更新或运行此更新./console内核:update—yes
.
在某些情况下,可能无法执行所需的迁移更新。例如,如果您在版本号更高的不同分支中工作,则会发生这种情况5. x-dev
为较低的版本号添加了更新。当您正在使用当前版本号,并且在不增加版本号的情况下将更新添加到当前Matomo版本号时,也会发生这种情况。Matomo会认为它已经执行了更新,因为版本号没有增加。在遇到问题(例如缺少一列)之前,您无法真正检测到这种情况的发生。当这种情况发生时,你需要在数据库中手动设置Matomo的版本号,并运行以下查询:
——你可能需要替换DB表前缀“matomo_”,你需要将版本号设置为正确的版本号,这样没有执行的更新脚本就会被执行。Set @current_version = (select option_value from matomo_option x where option_name = 'version_core');更新matomo_option set option_value ='{new_version_number_you_want_to_set}' where option_name like 'version_%' and option_value = @current_version;
注意:Matomo更新被设计为总是执行多次。如果更新已经发生,例如已经添加了一列,那么Matomo将“检测”到这一点,而不是错误。
有时你可能需要在Matomo的以前版本上运行一些代码,例如,对Matomo 3进行更改。目前还没有降级数据库(撤销更新)的方法,因此在这种情况下,您必须使用升级版本的Matomo和旧代码。
实际上,这意味着创建的降级功能在旧版本上仍然有效。唯一的例外是改变主版本。在这种情况下,将有关于如何手动降级数据库的文档,以便我们可以运行旧版本(例如这个常见问题://www.hju8.com/faq/how-to/how-do-i-downgrade-from-matomo-4-to-matomo-3/)。
如果您需要为您的pull请求更改matomo,请参阅我们的文档更新:https://developer.www.hju8.com/guides/updates-aka-migrations.
看到我们的Matomo代码标准专用指南.
看到我们的调试Matomo核心指南.
Matomo有各种子模块。这些将每周使用GitHub动作自动更新。这意味着如果您将某些内容推送到子模块(例如Tag Manager),则不需要在Matomo存储库中创建另一个pull请求来更新子模块。在某些情况下,例如,如果一个重要的修复是在发布前不久做出的,那么您可能需要创建一个PR来更新Matomo存储库中的子模块引用。
如果您正在修复一个错误,通常最好同时提交一个包含此修复的测试用例。这样的测试将有助于防止错误在未来再次出现。
如果您要向Matomo添加新功能,添加新的API方法或修改核心归档或跟踪算法,通常还需要提交新的或更新的单元或集成测试。
有关运行或创建测试的详细信息,请阅读我们的测试指南.
命名单元/集成测试时,使用鉴于,当,然后编写测试的惯例。
测试是确保Matomo保持稳定和有用的软件平台的关键部分。我们的目标是保持测试代码像生产代码一样干净,这样就容易改进和维护。
如果你已经开发了一个插件(恭喜你!),你认为可以包含在Matomo Core中,你可以提供它。
在Matomo Core中采用插件要求我们考虑以下标准(但不限于):
在大多数情况下,它应该足以让您的插件在市场.