为Matomo Core做出贡献

关于本指南

阅读本指南,如果

  • 你已经发现了一个错误,修复了它,想知道如何让你的修复接受上游
  • 有兴趣为Matomo(以前的Piwik)和想知道从哪里开始想知道这个过程是怎样的
  • 你肯定想知道Matomo开发人员认为是好的代码

指南的假设

本指南假设您:

  • 可以用PHP和JavaScript编写代码,
  • 可以使用git源代码管理工具
  • 熟悉GitHub
  • 并拥有必要的工具来为Matomo做出贡献(如果没有,请参阅我们的这部分开始扩展Matomo指南)。
  • 你一定有Git LFS已安装

贡献流程

贡献过程始于您想要修复的错误或您想要实现的想法。如果你没有,请随意挑选一张不定期的票github.com/matomo-org/matomo/milestones

一旦你决定了什么,继续下面的内容。

得到确认后,Matomo团队对这个想法很感兴趣

Matomo问题跟踪器中的大多数问题都是Matomo团队想要实现或解决的想法和错误。然而,情况并不总是如此,Matomo团队可能对某些问题不再感兴趣,即使它们仍然是开放的。

在你花时间研究一个bug或想法,并冒着最终可能无法合并的风险之前,强烈建议你这样做你首先在这个问题上留下评论,并解释你有兴趣为这个问题做出贡献.在你的评论中也要解释你计划如何解决bug或创建新功能,并要求团队对你的计划进行快速验证。这使Matomo团队有机会审查您的提案,以及他们是否希望将其添加到Matomo中,并尽早为您提供指导。团队将在问题中回复你,一旦他们确认,然后你就可以自信地处理这个问题,并努力打开一个Pull Request。

拿一本《马托莫》来研究

在你开始贡献之前,你需要先做好准备gitGitHub.如果需要,你可以在这里创建一个GitHub帐户

如果你是Matomo核心开发人员,那么你有写Matomo存储库的权限,因此你不需要分叉Matomo,可以跳过以下步骤。而是克隆Matomo库然后直接推到它。这将简化您的许多工作。

Fork Matomo存储库

登录GitHub时,访问Matomo的库.在右上角有一个按钮。点击它。Github将复制存储库到您的帐户。这个副本(或分支)是您将要处理的。如果你不知道叉子,请阅读更多有关叉子的知识GitHub上的叉子

设置git

提交时,git需要知道你的用户名和电子邮件。使用如下命令设置。

git配置——全局用户。电子邮件john@example.com

克隆分叉的存储库

克隆你的Matomo叉子(替换myusernameGitHub用户名):

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错误或警告。将以下设置应用于您的php . ini文件将使您能够捕捉这些错误:

display_errors = On error_reporting = E_ALL | E_STRICT

安装Composer依赖项

Matomo使用运行Matomo所需的各种库。虽然它们包含在官方发布中,但那些依赖关系需要在从Git签出时手动安装。要安装所需的要求下载/安装编写器在“Matomo”目录下执行以下命令。

作曲家安装

黑客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实际改变时执行。

处理Matomo更新

当版本增加并且有更新时,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的以前版本上运行一些代码,例如,对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 Core代码标准

看到我们的Matomo代码标准专用指南

调试

看到我们的调试Matomo核心指南

Matomo有各种子模块。这些将每周使用GitHub动作自动更新。这意味着如果您将某些内容推送到子模块(例如Tag Manager),则不需要在Matomo存储库中创建另一个pull请求来更新子模块。在某些情况下,例如,如果一个重要的修复是在发布前不久做出的,那么您可能需要创建一个PR来更新Matomo存储库中的子模块引用。

自动化测试

如果您正在修复一个错误,通常最好同时提交一个包含此修复的测试用例。这样的测试将有助于防止错误在未来再次出现。

如果您要向Matomo添加新功能,添加新的API方法或修改核心归档或跟踪算法,通常还需要提交新的或更新的单元或集成测试。

有关运行或创建测试的详细信息,请阅读我们的测试指南

命名单元/集成测试时,使用鉴于然后编写测试的惯例。

测试是确保Matomo保持稳定和有用的软件平台的关键部分。我们的目标是保持测试代码像生产代码一样干净,这样就容易改进和维护。

提交集成到Core的插件

如果你已经开发了一个插件(恭喜你!),你认为可以包含在Matomo Core中,你可以提供它。

在Matomo Core中采用插件要求我们考虑以下标准(但不限于):

  • 受众:插件吸引了广泛的用户
  • 可取性:它是Matomo社区经常要求的功能吗?
  • 功能:特性完整性
  • 可测试性:单元测试、集成测试和UI测试的使用,以及对手动测试的影响(例如,插件激活和停用时的差异)
  • 成熟度:插件的历史和流行程度
  • 性能:对存档和/或UI交互的影响
  • 支持性:产生“我怎么做?”或“为什么这样做?”之类的支持票和论坛帖子的可能性
  • 复杂性:越简单越好;如果开发者有git提交权限,则为+1
  • 依赖:它是否依赖于闭源和/或付费订阅服务?
  • licensing:与GPLv3的许可证兼容性

在大多数情况下,它应该足以让您的插件在市场

了解更多

Baidu