背景
公司内部要使用或推广必须要满足私有性和保密性,公司内部的代码是不可以公开到公网上的。rust 的公开代码仓库是 crates.io,那么私有仓库的解决方案是什么?我们一起来探索一下。
国外网站 reddit 有人发出了对私有仓库的需求并提问到:
Private “crates.io”Hi,I’m trying to advocate for Rust in my company, and one of the needs will be to have our own “crates.io” so our (closed source) crates can be managed by cargo.Is there a way to do that appart from specifying git urls?
另外,这位程序员还不想通过 git 来管理仓库,因为他的公司不用 git。
withoutboats 大牛的解决方案来了!2017 年 10 月,他说道:
本周,cargo 获得了一个新功能!现在您可以从其他仓库下载依赖包也可以从 ractes.io 下载的依赖包。这是重要的一步,使组织能够通过 cargo 分发其内部代码库,而无需将这些内部代码库上传到公共仓库。
此功能将仅在夜间可用,并用 alternative-registries 这个 feature gate 来进行封闭。自 1.0 版本以来,我们已经使用 feature gate 迭代 rustc 中新的不稳定的特性,但这是我们第一次在 Cargo 中使用 feature gate。
这里我解释一下此段话。因为 rust 的发布版本是很有节奏的,按每六周一个版本的节奏分为 nightly、beta、stable 三种版本。rust 还在发展阶段,版本迭代节奏快,开发团队想要快速发新功能并在外部快速得到验证,每个在开发的功能都会发布在 nightly 版本。nightly 版本是不稳定的,发布后再过六周就会自动变为 beta 版本 (期间会修改 bug)。beta 版本再过六周就会成功稳定版本。节奏图如下:
nightly: * – – * – – * – – * – – * – – * – * – *
| |
beta: * – – – – – – – – * *
|
stable: *
我们继续大牛的讲述:
自 1.0 之前起,cargo 已与 crate.io 仓库结合成一对。这个仓库包含数千个 crate,它们构成了 rust 的代库库生态系统的大部分,cargo 使下载和使用 crates.io 中的代码库变得非常方便。但是,有很多原因使用户可能不希望将其代码库上传到 cractes.io。特别是,专有代码不适用于 crates.io,crates.io 允许任何人下载它包含的任何 crate。因此,cargo 总是支持其他来源的仓库。具体来说,它支持从文件路径或 Git 仓库中拉取依赖包。
好了,也就是说可以使用 git 仓库来做私有仓库。哈哈
另一方面,到目前为止,cargo 只允许你一次依靠一个仓库的 crate。在许多情况下,像 crates.io 这样的仓库比 git 更好,因为它们能够更有效地管理多个版本的 crate,并为您执行版本解析。使用这个新功能,您将能够从 ractes.io 以外的仓库中拉取 crate。
好了,而且这个功能出来后,对于同一个 rust 项目用户可以同时使用两种上以的仓库。
实操
…