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專案使用者可以同時使用兩種上以的倉庫。
實操
...