我习惯了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)中找不到任何相关内容。他们列出了一个名为“许可证合规性”的功能,该功能可能取决于(未)认可的许可证。我不相信我可以在那里设置许可证,但我什至在我的存储库的设置中都找不到许可证合规性。免费帐户是否提供此功能?
没有太多活动的不正确消息存在一个未解决的问题: https ://gitlab.com/gitlab-org/gitlab/-/issues/30997
license.txt
我已通过将两个许可证重命名为并将其中一个许可证移动到子目录来解决我的项目的问题。从前面显示的图标判断,这两个文件现在都被识别为许可证文件。但是,项目概览中仅显示位于项目根目录中的许可证文件的许可证。我认为这不是一个好的解决方案,因为它使使用多个许可证变得不那么明显,但是在我的情况下,我将一个许可证用于主项目,而另一个许可证用于自动化测试,我认为这比错误的主张要好有“没有许可证”。
在https://gitlab.com/gitlab-org/gitlab-foss/-/issues/15470,gitlab的维护者说:
我在这里找到了一个同名的 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
. 如果没有找到匹配的文件,则声称该项目没有许可证。在上述问题中提到了手动选择许可证(文件)选项的想法作为新功能,但不是该问题的范围。