我以前习惯 gitlab 根据 license 文件自动检测项目的 license ,但这次失败了。
我在一个 gitlab 项目中有一个 LaTeX 包和一个测试脚本,它们使用不同的许可证。我在根目录中有两个许可证文件,分别称为license_lppl.txt
和license_wtfpl.txt
。但 gitlab 无法识别这两个许可证,并显示“无许可证。保留所有权利”。如果它只是不显示许可证,我可能会接受它,但这种说法是错误的。
gitlab 如何识别许可证?如何告诉 gitlab 代码已获得许可?gitlab 如何处理多个许可证?
我在 gitlab 的用户文档中没有找到任何关于此内容的信息(https://docs.gitlab.com/ee/user/project/index.html)。他们列出了一项名为“许可证合规性”的功能,该功能可能取决于(未)识别的许可证。我不确定我是否能够在那里设置许可证,但我甚至在存储库的设置中找不到许可证合规性。免费帐户中是否提供此功能?
答案1
有一个关于错误消息的未解决的问题,但活动并不多: https://gitlab.com/gitlab-org/gitlab/-/issues/30997
我已经为我的项目解决了这个问题,方法是将两个许可证重命名license.txt
并将其中一个移动到子目录。现在,根据显示在它们前面的图标判断,这两个文件都被识别为许可证文件。但是,只有位于项目根目录中的许可证文件的许可证才会显示在项目概览中。
我认为这不是一个好的解决方案,因为它使得使用多个许可证变得不那么明显,但就我而言,我对主项目使用一个许可证,对自动化测试使用另一个许可证,我认为这比错误地声称“没有许可证”要好。
在https://gitlab.com/gitlab-org/gitlab-foss/-/issues/15470gitlab 的维护者说:
我们现在使用“Licensee”Gem 来查找许可证。
我在这里找到了一个同名的 git 存储库: https://github.com/licensee/licensee
我已经安装了它# apt install ruby-licensee
。$ licensee
在我的项目存储库中运行可以license_lppl.txt
正确找到并检测许可证。运行$ licensee license_wtfpl.txt
也可以正确检测许可证。但该程序不支持github因此我认为使用 apt 安装的版本已经过时了。
我创建了一个测试存储库,并尝试了不同的东西。即使我使用按钮创建许可证文件Add License
(并将其命名为license_lppl.txt
或license_wtfpl.txt
),而不是推送它,gitlab 也会不是认出它。
根据我的观察,我假设 gitlab 正在检查一堆预定义文件名是否存在,并且只针对那些文件尝试提取许可证licensee
。如果未找到匹配的文件,它会声称该项目没有许可证。
手动选择许可证(文件)的选项的想法被提及为上述问题但是不是该问题的范围。