Not-Forking工具

2021-06-14 01:18:04

not-forking避免重复另一个项目中的一个项目的源代码,其中项目彼此外部。

Not-Forking通过基本上自动化更改管理,避免了项目级别分叉,以便在诸如化石,Git或Github等版本控制系统,如FOSEL,GIT或Github的方式。完整的文档比此概述更详细。

此图下图显示了问题不叉饰的最简单情况。这里称为上游的外部软件,形成一个名为组合项目的新项目的一部分。上游不是您的系统上提供的库,因为那么您可以将SimplyLink到libupstream。相反,上游是您将其复制到组合的ProjectDirectory树中的源代码:

//鉴于Pikchr.org的所有浏览器,设备,灯条件和眼球//选择最大可见性的图1 //鉴于Pikchr.org的局限性,这反过来又通过SSColor = Whitediagramframe呈现的SVG:[上游:文件"上游项目" "文件存储库" FIT RAD 10PX填充黑色文件相同RAD 10px 0.1cm的上游右侧填充无移动;移动箱在上游&#34下方1.2cm;结帐然后" "手动复制文件" Rujust Color Green InvisiBlemyProj:文件"组合项目" "文件存储库"适合rad 10px,上游.se +(0.5,-0.5)填充blackmyproj2:文件同样rad 10px在myproj的0.1cm右侧从上游填充noearrow,从上游向下1.5cm然后向右1到myproj.w rad 20px厚的颜色蓝色填充黑色]图表:框"图1:not-forking问题概述" Italic Bold Fit Height 200%,在图框架下面0.2cm下为0.2cm.s颜色橙色看不见

您是否应该将上游进入源代码管理系统? Allsource代码应在版本管理下,但是在本地存储库中的Anexternal存储库中的签出感觉错误......我们是否希望失去上游项目历史记录?

如果组合项目在上游更改了文件,那么您将如何使用更改以及在上游进行的任何新更改?

开发人员现在有很好的理由将上游项目代码与其展开中的上游项目代码分开并将其维护在组合的项目树中,因为在TheShort术语中它只是更简单。但这带来了理论上的项目叉的大问题。一个不情愿的项目叉,或" vending"正如DebianProject所说的那样,是组合项目的up上游的何处开始从原始上游漂移。没有人希望目前由其原始作者维护的修剪衣服代码,但避免这种情况可能变得复杂。 Not-forking Makesthis可以解决一个更容易解决的问题。

NOT-FORKING还解决了更复杂的情景,例如当随向项目的组合项目上行时:

上游1 git repo上游2 tarball源不是叉形配置&源修改FOSSIL REPO使组合项目Makefile呼叫Not-Forking从上游创建组合构建树+ Config +修改组合项目二进制图2:Not-Forking与两个上游有两个

//图2 //选择所有浏览器,设备,光线和眼球//鉴于Pikchr.org的限制,所选择的最大可见性,这反过来受到SVG的限制,其独立于CSScolor = Whitediagramframe:[Scale = 0.8上游1:文件"上游1" " git repo" Fit Rad 10px填充黑色文件相同的Rad 10px在0.1cm右侧右侧填充无移动; moveupstream2:文件"上游2" " tarball源" FIT RAD 10PX填充黑色文件相同RAD 10px在0.1cm右上的上游2填充无移动; movemyproj:文件" not-forking configs" "&源修改" "化石回购" Fit Rad 10px Fill BlackMyProj2:锉刀inact rad 10px在0.1cm of myproj填充none downmake:box"制作组合项目"斜体适合Rad 20px HT 1,上游2.S +(0,-0.7)填充黑色下Notfork:File" Makefile呼叫Not-Forking" "创建组合构建树" "来自上游+配置+修改"用.n的Fit rad 10px .s +(0,-0.8)填充黑色下组合:文件"组合项目" "二元" Fit forfork的Rad 10px .s +(0,-0.9)从上游填充Blackarrow 1.5cm,然后右1°C向上1左右,从上游2.s下游1.5cm to make.n rad 20px厚的颜色bluearrow从myproj.s下降1.5cm然后左1个make.e rad 20px厚的颜色蓝色bluearrow从make.s to notfork.n rad 50px厚厚的厚彩色重新拿着从notfork.s组合到组合.n rad 50px厚厚的厚厚彩色红色]图表:框"图2:用两个上游&#34没有叉子;大胆的斜体贴合高度200%,在图框下下面0.2cm.s颜色橙色看不见

跟踪多个上游,每个上游都有不同的发布计划和版本控制系统。手动合并很困难,但不能合并或仅偶尔合并常常会导致硬叉。 Lumosql跟踪三个上游的所有这些方式不同

跟踪您希望进行更改的上游不合理的更改。如果没有注销的手动合并是唯一的选项,即使只有一个上游,即使修补程序集不复杂。一个明显的情况是替换,删除或创建整个文件

vending,程序包将库或模块复制到自己的树中,避免使用系统提供的库时出现的版本处理问题。然后,这成为一个独立的叉子,直到下一个副本完成,这通常涉及手动移植任务。 not-forking可以阻止这个问题出现

具有版本控制的助手,例如GitHub上的LibVNC的一些叉子中的一些是维护的,运输产品,这些产品高达原始的数百个犯罪。看似他们每年手动与原来同步,但潜在的不是叉子可以消除大部分手动工作

以下图表指示使用更复杂的方案才能使用叉定。任何版本控制系统都可以随身携带,并且,今天的生产使用不足以轻松地处理高达50个上游版本。

上游1版本1上游1版本2上游2版本1上游2版本2 not-forking configs&源修改FOSSIL REPO使项目上游1V2 +上游2V1 MakeFile呼叫Not-Forking将两个上游加上任何自定义代码组合项目二进制创建图3:Not-Forking具有多个版本和多个上游

//图3 //选择所有浏览器,设备,光线和眼球//鉴于Pikchr.org的限制,所选择的颜色为所有浏览器,设备,灯条件和眼球//通过SVG呈现出独立于CSSDIAGFRAME的SVG:[SCALE = 0.8Color = whiteupstream1_1:文件"上游1" "版本1" Fit Rad 10px填充黑色文件相同的Rad 10px在上游0.1cm右侧填充NINUPSTREAM1_2:FILE"上游1" "版本2"在上游1_1.e +(0.4,-0.5)FIT RAD 10px填充黑色文件相同的RAD 10px在0.1cm右侧的上游右侧1_1填充None MOVEUPSTREAM2_1:FILE"上游2" "版本1" FIT RAD 10px填充黑色在上游1_1.e +(1.5,0)锉刀在0.1cm的上游右侧的rad 10px填充noneumstream2_2:file"上游2" "版本2"在上游2_1.e +(0.4,-0.5)FIT RAD 10px填充黑色文件相同的RAD 10px在上游0.1cm右侧填充none none movemyproj:file" not-forking configs" "&源修改" "化石回购"适合Rad 10px填充黑色在上游2_1.e +(3,0)myproj2:锉刀inact rad 10px在0.1cm of myproj的lex none none oponmake:box"在上游1v2 +上游2v1和#34制作项目组合项目; Italic Fit rad 20px ht 0.8,上游2_2.s +(0,-0.7)填充黑色下Notfork:File" Makefile呼叫Not-Forking" "组合两个上游" "加上任何自定义代码"用.n的Fit rad 10px .s +(0,-0.8)填充黑色下游:框"组合项目" "二进制创建" Fit rad 20px ht 0.8在notfork.s +(0,-0.9)+(0,-0.9)从上游1_2.s下填充1.5cm,然后右1厘米1左右从上游2_1.s向下开始,直到上游向上1_2 make.n rad 20px厚的颜色蓝色bluearrow从myproj.s下降1.5cm然后留下1 make.e rad 20px厚的颜色bluearrow从make.s to notfork.n radfork.n rad 50px厚厚的厚彩色粗厚的厚彩色重新拿着notfork.n rad 50px厚厚的厚彩红色]图表:框"图3:用多个版本和多个上游&#34而不是叉子;大胆的斜体贴合高度200%,在图框下下面0.2cm.s颜色橙色看不见

如果您在GitHub上读了这一点,您正在查看一个只读镜子。官方主页是化石存储库,这是与社区贡献和互动的最佳方式。您可以在GitHub上提高PRS,但无论如何,它们将最终推动化石。

在这里,您将找到该工具及其库以及完整的文档。它还包含可以用于测试的示例配置(在目录文档/示例中)。从0.4版本,目录lib / notfork / not-fork.d包含工具本身的配置命令配置,用于查找特定的版本大方,如果与安装的不同。

Perl Module Text :: Glob是必需的。许多操作系统在名称libtext-glob-perl下包。例如,在debian或ubuntu系统上,键入:

要下载,可以使用化石克隆或Git克隆,或者,用WGET下载:

perl makefile.plmakesuksudo make install#您需要此步骤的root,通过sudo或其他

此时,Not-Fork命令安装在系统中,并且ItsRequired模块可​​用,其中您的Perl安装期望Tofind它们。

您可能会想知道运行时依赖项。这是众多文档的文档,但简要介绍,Not-Fork知道每个不同场景所需的内容,它现在不需要解决。这意味着你不需要担心当你安装它时可能使用的东西。目前Not-Fork可以使用包括Git,Fossil,Wget / Tar和FTP的访问方法。可能会添加模块,例如Formercial。

git rebase无法解决不叉叉问题空间。既不能Gitubmodules。也没有化石' serge,也不是组合匹配的被子方法。

VCS无法解决不叉叉的问题,因为DecisioneRequired通常由人类进行港口或重新实现,换句话说需要组合上游。补丁流可以' t描述了什么要做的,所以自动化这需要脆弱的脆弱的一个代码。注意,不可能在没有这些codeTangles的情况下编写构建系统。

检查所有上游的新版本,做了无所谓的释放号码/字母的比较,而不是repo checkins或标签,其中无可读的版本号在其建筑中广泛变化

在所有情况下将foo.c替换为bar.c(可能是因为我们想要替换具有更安全实施的相同API的闪烁)

将此修补程序应用于上游0的main.c,但仅在我们的情况下拉在上游1.c中的情况下,但如果我们也使用上游2.c

应用这些非修补程序更改为上游0 main.c符合Sedrather的风格而不是修补程序,使得可以合并VCS说areunmerable的树木

使用上游1.c版本2和上游3.c 3.c版本3,均在上游0' s main.c版本5

缓存所有上游的所有版本,使构建系统可以快速地通过大量版本的代码矩阵,也许是测试/基准

术语" fork"有几个含义。 not-forking只是在onemeaning解决:当其他人维护的源代码被当地修改。这会创建如何维护整个原始代码库的修改后的问题。

not-forking不适用于永久的全项目叉。这些往往是大量的稀有事件,例如libreoffice从OpenOffice.org分开,或者Mariadbfrom MySQL。这些是预期的,计划和管理项目。

Not-forking不适合极端的陪同,如在2021年1月的Debian决定的情况下,在巨型流是巨人和基础上的保证,它将保持其上游所有上游。

以下是单词" fork" 这与Not-Forking无关: 在化石,A" Fork" 可以是Deamonainsplits的线性分支成两个具有相同名称的线性分支的点。 化石有关叉子/分支的讨论。 github使用与git相同的定义。 除了为新克隆中提供的工具和重新导入新克隆中的更改,Github促进了叉车。 因此,GitHub项目有常见的是有多张叉/克隆,并且对于一个流行的项目可以有数百个。