rust的私有代码仓库

背景

公司内部要使用或推广必须要满足私有性和保密性,公司内部的代码是不可以公开到公网上的。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项目用户可以同时使用两种上以的仓库。

新手问题

跑第一个程序时,发现在国内拉取crate.io的依赖经常超时。可以切换国内的中科大的源:
http://mirrors.ustc.edu.cn/he...

在 $HOME/.cargo/config 中添加如下内容:
[source.crates-io]
replace-with = 'ustc'
[source.ustc]
registry = "git://mirrors.ustc.edu.cn/crates.io-index"

相关推荐