【.com快速翻译】如果您和您的团队正在使用像Git或Subversion这样的源控制管理系统(SCM),您可能需要一个管理层来管理用户访问和存储库以适当的方式。目前GitHub、GitBlit、GitLab都是该领域流行且强大的管理解决方案。当然,如果您计划使用像Jenkins这样的自动化服务器来创建您自己的构建和部署管道,您还需要托管自己的存储库管理器。当然,客观来说,GitLab等解决方案不仅管理起来非常复杂,而且往往需要一定的实践经验;而为了保持良好的运行性能,对硬件资源的要求往往也不低。因此,为了克服这些困难,我们可以考虑引入工具——SCM-Manager[1]。它简单、可扩展、运行快速且高效。SCM-Manager是一款德国制造的工具。由于它是MIT许可下的开源软件,因此允许商业用途,其代码可在GitHub上获得。该项目最初仅用于研究目的,在2.0版本之后,由Cloudogu接手管理和开发其各种代码库,为各公司提供专业的企业级支持。从安装开始,让我们来看看它的简单安装步骤。为了快速得到结果,您可以使用其官方的Docker容器[2]并输入以下简单命令。dockerrun--namescm--restart=always\-p8080-p2222\-v/home//scmManager:/var/lib/scm\scmmanager/scm-manager:2.22.0首先,让我们以SCM-Manager2.22为基础.0图像创建一个名为scm的容器。然后,我们需要让容器在主机操作系统重启后自动重启。此外,为了使其可访问,我们需要打开端口2222和8080。最后,我们需要在存储所有配置数据和存储库的容器内挂载一个目录。当然,您也可以参考下面的安装清单,使用apt使SCM-Manager在Ubuntu等Linux服务器上运行。echo'deb[arch=all]https://packages.scm-manager.org/repository/apt-v2-releases/stablemain'|sudotee/etc/apt/sources.list.d/scm-manager.listsudoapt-keyadv--recv-keys--keyserverhkps://keys.openpgp.org0x975922F193B07D6Esudoapt-getupdatesudoapt-getinstallscm-server此外,SCM-Manager也可以安装在Windows或Apple系统上。您可以在相应的下载页面[3]找到各个系统对应的安装信息。如下图所示,在执行安装时,您将在控制台中看到带有启动令牌的各种日志条目。图1:命令行上的启动令牌接下来,您可以打开浏览器并输入localhost:8080。从那里您可以通过创建和初始化管理帐户来完成安装。如图2所示,您需要从命令行粘贴启动令牌,并在提交初始化表单后,重定向到登录页面。这些前期准备工作估计在5分钟内完成。图2:初始化页面如果您想尝试完整的、无人值守的安装脚本,您可以使用系统属性scm.initalPassword绕过初始化表单。它将使用给定的密码创建一个名为scmadmin的用户。在老版本的SCM-Manager中,默认的管理员登录帐号是scmadmin,密码是scmadmin。从安全角度考虑,如果安装后不手动禁用账户,会给系统带来较高的风险。不过值得庆幸的是,其2.21及之后的版本已经改进了这个安全漏洞。插件SCM-Manager可以通过插件的扩展实现最小化安装和增加更多实用功能。值得注意的是,随着安装插件数量的增加,SCM-Manager需要获取的资源也会增加。因此,您的开发团队需要根据实际需求确定插件的优先级和必要性。图3:已安装的插件您可以通过“管理”选项卡按需安装插件。如果您没有看到此选项,可能是因为您没有管理权限。在界面右侧菜单中,可以找到对应的插件入口。插件菜单分为两部分:已安装和可用。为了更好的浏览方便,各种插件已经按照管理、授权和工作流程进行了组织和分类。此外,每个插件都带有简短而准确的描述。它将包含一些预安装的插件。例如,在源代码控制类别中,无法卸载支持存储库类型的Git、Subversion和Mercurial。在授权部分,PathWriteProtection、BranchWriteProtection和TagProtection是构建和配置管理器非常有用且易于安装的插件。特殊权限让我们假设一个Java/Maven项目。规则是只有特定人员才可以更改pom.xml的内容,构建相应的逻辑。对此,我们可以通过路径写保护插件来实现。具体的,安装完成后,进入代码库,在界面右侧菜单中选择设置,然后点击选项路径权限,启用复选框。图4:配置路径权限如上所示,我创建了一个规则,只有用户ElmarDott可以修改pom.xml。此外,此权限涵盖所有现有分支。由于其反向权限是独占的,如果文件或路径表达式不存在,则无法创建规则。为了便于管理,我们将对现有用户进行分组。因此,当您的团队使用大量分支或git-flow分支模型时,您可以使用此选项来保护单个分支免受不必要的更改。同时,拥有开发人员分支的个人开发人员将只有写入权限,而配置管理团队的成员将拥有发布分支访问权限以运行CI/CD管道。拉取请求让我们讨论另一个有用的功能——审查插件。此插件为您的存储库启用拉取请求。安装完审查插件后,在您的存储库菜单中,将出现一个名为PullRequests[4]的新项目符号。最初,拉取请求旨在让开源项目保持代码质量。这种范式的另一个名字是独裁工作流[5]。每个开发人员都可以将自己的更改提交到存储库,存储库的所有者将决定将哪个修订合并到代码库中。让我们假设一个场景:如果你在GitHub上托管自己的项目源,其他人想要为你的项目做出贡献。好吧,他们必须先将存储库fork到他们自己的GitHub空间中。在他们对该分支存储库提交一些修订后,他们需要针对原始存储库创建拉取请求。同时,作为仓库的所有者,你需要决定是否接受这样的拉取请求。由此可见,pullrequest方式可以作为codereview的工具,真正提升项目中的代码质量。存储库管理SCM-Manager结合了三种不同的源代码控制管理存储库——Git、Subversion(SVN)和Mercurial。尽管Subversion已经有些落伍了,但许多公司仍然必须使用SVN来管理各种遗留项目。毕竟,将这些项目迁移到其他技术堆栈的风险或成本可能很高。因此,我们需要有一个可以管理多种存储库类型的解决方案。如果您使用的是SVN,请注意Subversion如何在其目录中组织分支和标签。通常,SVN存储库使用以下文件夹进行初始化:Trunk-类似于Git中的master分支。分支-指向主干中已分叉的修订,并且可以提交更改的代码。标签-就像没有新代码修订的分支。在Git中,你不需要这样的文件夹结构,毕竟分支的组织方式是完全不同的。与Subversion相比,Git(和Mercurial)是一个分布式源代码控制管理系统,其分支是分离的。因此,一旦它们“过时”,就会被直接删除。自述文件如果readme.md文件位于项目的根文件夹中,自述文件插件将被激活。导航到存储库后,readme.md文件将以HTML格式呈现。图5:存储库的readme.md呈现如果您希望存储库的活动既可读又可视,您将需要一个活动插件。它在标题菜单中创建一个名为Activity的导航条目。在这里您可以看到所有提交的日志条目和所选修订的详细视图。图6:活动视图与TortoiseGit客户端类似,该视图还包括一个比较和历史浏览器。存储库管理器(RepositoryManager)也会包含更多日常操作的细节。将有一个代码编辑器,允许您直接在SCM-Manger的用户界面中修改各种文件。用户和组管理在SCM-Manager中,创建新用户其实非常简单。您所要做的就是切换到“用户”选项卡并按下“创建用户”按钮。填写表格并保存后,您将能够看到用户概览。图7:创建新用户此时,您可以看到新创建的用户。接下来,您需要管理用户的权限。目前新用户没有任何权限。要更改它,您只需要点击新创建的用户名,右击用户的详细信息页面,然后在菜单项上选择设置->权限。您可以在此处为用户选择适当的权限,并在完成后保存更改。然后您可以尝试注销并以该用户身份重新登录以确认他们的权限。如果需要管理大量用户,最好将他们分组。我们可以通过头部导航中的群组(Group)菜单项来管理群组权限。您可以创建一个新组并从其右侧的菜单中选择适当的权限。它的具体配置形式与用户管理非常相似。如果要将现有用户添加到特定组,请切换到“常规”选项卡,在“成员”字段中搜索用户,然后使用“添加成员”按钮进行添加。最后,记得提交表格并保存任何权限更改。为了体现灵活性,SCM-Manager还允许将同一个用户加入到多个组(或角色)中。注意,请不要轻易将用户合并到过多的组中,以免用户继承不该授予的权限。目前SCM-Manager还不能通过简要概览的方式列出查看哪些用户属于哪些组,继承了哪些权限。希望它的未来版本会有所改进。此外,除了SCM-Manager提供的内部用户管理外,您还可以通过插件将您的应用程序连接到LDAP。总结除了上面提到的SCM-Manager的基本功能外,我们不仅可以使用它的API创建各种可执行脚本,还可以将Jira、Timescale、Prometheus等基础设施工具与SCM-Manager集成。此外,SCM-Manager还提供了Jenkins自动化服务器的插件。总之,如果你有兴趣,不妨试试这个新的资源控制管理器。本文参考[1]https://www.scm-manager.org[2]https://hub.docker.com/r/scmmanager/scm-manager[3]https://www.scm-manager.org/download/[4]https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests[5]https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows原标题:Tooltime:SCM-Manager,作者:ElmarDott作者及出处为.com]