Gitoxide:Git的纯锈实现

2020-08-13 15:07:13

GIX是访问git存储库的命令行界面(CLI)。它是为优化用户体验而编写的,其性能与本机实现一样好或更好。

此外,它还以各种小板条箱的形式提供了一个易于使用且安全的API,可以轻松地实现您自己的工具。有关所有板条箱及其功能的列表,请参阅开发状态(Development Status&39;for the List';Development Status&39;for the List';Development Status&39;)。

Gitoxide(CLI)请注意,所有功能都来自gitoxide-core库,它反映了这些功能,本身依赖于所有git-*板条箱。

从包创建管道索引-通过流式传输包文件来创建索引文件,就像克隆期间所做的那样。

Git-ODB承诺它是模糊的,但它们看起来就像是索引文件,允许按需从服务器获取对象。

演示思路使用sqlite虚拟表为GIT打开SQL。还可以看看gitqliteas。MVP会是什么样子?甚至可能是可以和Gitoxide一起运输的东西。

有关Linux、MacOS和Windows的手动安装和各种更薄或更小的替代构建,请参阅发布部分,具体取决于您的需要。

货物是防锈包装管理器,可以很容易地通过生锈获得。有了它,您可以毫不费力地为您的特定CPU构建自己的二进制代码,从而获得额外的性能提升。

#默认安装,在Linux上,Cargo Install Gitoxon#编译术语版本要快一点,这也会产生稍微小一些的二进制文件Cargo Install Gitoxide--no-default-Feature--特性max-Terion#对于较小的二进制文件和更快的构建时间(以换取不那么复杂的CLI实现为代价),请分别使用`lean`#或`Lean-termion‘。Cargo安装gitoxno-no-default-feature--。

一个纯粹可靠的git实现为最常见的git操作提供了一个简单的命令行界面,并针对用户体验进行了优化。如果你愿意,那就是个简单的蠢货。

成为任何想要解决围绕GIT的问题的人的首选实现,并在此过程中成为GitPython的替代方案。

成为性能最佳的实现使用Rust的类型系统来优化未完成的工作,而不是很难使用。

采用快捷方式,但不是质量IO错误,因为打开的文件句柄数量不足并不总是会导致操作失败。

完美复制git命令功能git就是git,没有理由不使用它。我们的道路是一条简单易行的道路,让Git入门变得容易。

随时随地使用异步IO在很大程度上,GIT操作严重依赖内存映射IO和CPU来解压缩数据,这不利于异步IO的开箱即用。

使用阻塞和git-feature::interrupable将操作带入异步世界并控制长时间运行的操作。

当通过TCP连接进行连接或流式传输时,尤其是在服务器上接收时,异步似乎是必须的。不过,应该可以把它放在功能标志后面。

Cargo使用功能切换来控制拉入哪些依赖项,从而允许用户专门指定板条箱以满足其用途。理想情况下,这些功能应该是附加的。本指南介绍了此处提供的每个板条箱可用的功能以及它们的功能。

FAST通过支持其他长时间运行函数的并行计算以及快速的硬件加速散列,使机箱尽可能快地执行。

(互斥)Pretty-CLI使用clap 3.0以牺牲文件大小为代价,构建最漂亮、文档最完善、最用户友好的CLI。

LEAN-CLI使用argh生成一个可用的二进制文件,其中包含大小最小的像样的文档,通常比Pretty-cli小300KB。

如果还启用了Pretty-CLI,则将优先使用LINE-CLI,您将为构建不必要的依赖项买单。

Prodash-ender-line-Crosterm或prodash-ender-line-term(互斥)--详细标志将由交互进度机制提供支持,该机制将在较短持续时间后显示两倍于日志和交互进度的进程。(=。

Small=尽可能小的精简CLI,无线程,无FAST SHA1,仅基于日志的进度,无中断时清理临时文件

一种板条箱,用于帮助控制使用Gitoxide核心的顶级板条箱或任何其他使用Git功能的Gitoxide板条箱提供的功能。所有功能切换都是附加的。

并行使用限定作用域的线程和通道来并行化多个对象上的常见工作负载。如果启用,它将在任何有意义的地方使用。

由于每个线程都可能使用和实例化缓存,因此在线程开销之上将使用更多内存。

FAST-SHA1是一种可以使用硬件加速的多机箱实现,因此在支持它的CPU(如AMD Ryzen或Intel Core i3)上具有高达2 Gb/s吞吐量的潜力。

中断处理程序侦听中断和终止请求,并提供长期运行的操作工具以允许中止输入流。

如果未设置,这些实用程序将是无操作的,在中断时可能会导致泄漏临时文件。

接下来是控制所有面向公共的简单数据类型的序列化的功能切换。

这两个术语都来自git实现本身,尽管它不一定指出哪些命令是管道命令,哪些命令是瓷器命令。管道命令指的是较低级别的、较少使用的命令,这些命令通过被它调用或用于某些用途来补充瓷器命令。瓷器一词指的是那些具有良好用户体验的命令,它们主要是供人类使用的。

在任何情况下,这两种类型的程序都必须使用--help标志自行记录其功能。

它不需要git存储库,而是通过命令行获取所有变量。

默认情况下,向stderr提供输出以提供进度信息。没有必要允许禁用它,但除非操作需要一些时间,否则它不应该出现。

精简、轻便和小型构建不支持非UTF-8路径,这是因为它们依赖于argh,而argh还不支持解析OsStrings。然而,我们相信它最终会这么做,因此不要转向微微参数。

程序包文件使用内存映射可能的补救措施是:我们可以对Pack进行泛化,使其可以直接在内存中缓冲区上工作。这样,人们可以通过将整个文件读入内存来初始化包,从而不会以延迟和内存效率为代价来压制IO错误。

Packfiles无法在32位系统上加载大于2^31或2^32的文件。可能的补救措施是:实现滑动窗口以根据需要映射和取消映射文件的各个部分。

CRC32实现不使用SIMD,也许可以免费升级到crc32fast机箱,但它看起来没有维护,代码也更多。

Deducate2(麻省理工学院许可)我们使用各种抽象直接在相当低级的Miniz_Oxide机箱上实现解压缩和压缩

小型氧化物不必要的缓冲区重置在InflateState结构中,有一个很大的32KB缓冲区,每次解压尝试都会清零。

解压缩之间的状态重用可能会更快,类似于上面,有几次我们在一个';中同时解压缩,这也需要重新创建一个用零填充的32KB缓冲区。如果可以重用大部分状态,那么在包查找和包流期间处理数百万个对象时,我们将节省时间。

起初,我真的对这个问题很着迷,并相信有了氧化锗,就有可能提供最快的解决方案。

从13年前我第一次体验GIT开始,我就完全被GIT迷住了,并多次尝试以各种形式和形式实现它。现在有了铁锈,我终于觉得找到了适合这项工作的工具!