git - 使用 git 作为插件管理系统
问题描述
在设计我的一个新项目时,我想出了将其git
用作插件管理系统的想法。一般的想法是主项目将是一个git
存储库,插件将是它的分支。最酷的是它可以git
自动管理诸如合并冲突和拉和推之类的事情,同时是大多数人熟悉的工具。
如果有人想安装插件,他们可以克隆一个 fork 而不是主存储库。问题是这只允许一次安装一个插件。即使两个插件修改了两个完全不同的文件并且没有冲突。
理想情况下,我想要的是能够跟踪单个主存储库,但也能够同时从多个插件存储库中提取更改。如果主 repo 中的文件被更改并且它不与任何插件所做的任何更改冲突,它应该只是正常更新,而不必先更新 fork。
基本上,我会将每个插件想象成某种对单个代码行所做更改的目录,只要没有冲突,就可以将其应用于主存储库的任何版本。
举个例子:假设主仓库有一个名为的文件logger.h
,如下所示:
void
log(const std::string& message) noexcept
{
const prefix = "LOG: ";
log << prefix << message;
}
一个名为的插件ImprovedLogger
可能会将此文件更改为如下所示:
void
log(const std::string& message, const std::string& source = "") noexcept
{
const prefix = "LOG: ";
log << prefix << source << message;
}
同时,另一个名为的插件LoggerPrefixRemover
会将文件更改为:
void
log(const std::string& message) noexcept
{
const prefix = "";
log << prefix << message;
}
如果同时安装了两个插件,则文件将如下所示:
void
log(const std::string& message, const std::string& source = "") noexcept
{
const prefix = "";
log << prefix << source << message;
}
然后,假设主存储库将文件更改为:
bool
log(const std::string& message) noexcept
{
const prefix = "LOG: ";
log << prefix << message;
return log.good();
}
然后,用户应该能够拉取新的主存储库并获得如下所示的文件,而无需从主存储库更新分支/插件:
bool
log(const std::string& message, const std::string& source = "") noexcept
{
const prefix = "";
log << prefix << source << message;
return log.good();
}
是否可以创建诸如系统使用git
?
解决方案
推荐阅读
- asp.net - 我可以用什么来代替 ASP.NET MVC 5 中的 [AllowHtml] 属性?
- spring - 识别运行 Spring Boot 应用程序的平台
- docker - 构建 Dockerfile 时 AzureDevops 找不到 csproj 文件
- java - 无法在 http://localhost:8080/business-central 上启动 jbpm
- amadeus - 自助预订流程,包括付款
- pyspark - 如何在 pyspark 的数据透视表中添加/包含标题行和总计行?
- ruby-on-rails - Spree 自定义控制器中的实例变量 - 自动分配?
- python - 是否有一种方法/算法可以从给定数字的素数生成唯一整数?
- asp.net-core - 取消令牌有时不会取消 HttpRequest
- .net - 无法将带有 axious 的数组列表从 vuejs 发布到 .net Core