{"id":13487042,"url":"https://github.com/wtklbm/crm","last_synced_at":"2025-05-16T08:06:10.880Z","repository":{"id":45640858,"uuid":"323566295","full_name":"wtklbm/crm","owner":"wtklbm","description":"Cargo registry manager (Cargo 注册表管理器)，用于方便的管理和更换 Rust 国内镜像源 ","archived":false,"fork":false,"pushed_at":"2025-04-17T08:12:43.000Z","size":125,"stargazers_count":429,"open_issues_count":2,"forks_count":26,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-17T21:54:14.708Z","etag":null,"topics":["cargo","cratesio","registry","rust-lang"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/crm","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wtklbm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-Apache-2.0","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-22T08:28:37.000Z","updated_at":"2025-04-17T08:12:47.000Z","dependencies_parsed_at":"2023-12-14T06:28:46.046Z","dependency_job_id":"f2367052-ff3b-40ae-8b00-7caa1309ae9c","html_url":"https://github.com/wtklbm/crm","commit_stats":{"total_commits":180,"total_committers":3,"mean_commits":60.0,"dds":"0.011111111111111072","last_synced_commit":"cb4f0ce134873b9391fe82c96f3452ff9ac59f9b"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wtklbm%2Fcrm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wtklbm%2Fcrm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wtklbm%2Fcrm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wtklbm%2Fcrm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wtklbm","download_url":"https://codeload.github.com/wtklbm/crm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493378,"owners_count":22080126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cargo","cratesio","registry","rust-lang"],"created_at":"2024-07-31T18:00:54.715Z","updated_at":"2025-05-16T08:06:05.871Z","avatar_url":"https://github.com/wtklbm.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# crm (Cargo registry manager)\n\n[`crm`](https://github.com/wtklbm/crm) 是一个在终端运行的镜像管理程序，能够对 `Cargo` 镜像源进行简单的添加、修改、删除操作，并能帮助您快速的切换不同的 `Cargo` 镜像源。`crm` 内置了多种国内 (中国) 镜像源，它们分别是：`sjtu`, `tuna`, `ustc`, `rsproxy`，`bfsu`, `nju`, `cqu`, `zju`, `cernet`。\n\n\n在使用 Rust 语言做开发时，使用 Rust 官方镜像源进行 `cargo build` 的速度非常的慢，可能会因为网络的原因导致依赖下载超时而无法完成编译。为了能够在最少的时间内完成打包操作，一般会使用国内镜像源来代替官方镜像。\n\n\n通常，大家一般会手动修改 `~/.cargo/config.toml` 文件来完成镜像的切换，手动修改配置文件的工作是繁琐的，它需要手动打开文件所在的目录，还要记住每一个镜像源的地址和配置方式，在不知道哪个国内源的网速最快的时候，我们还需要对镜像的速度进行手动的测速，在使用国内镜像源的过程中，如果当前所使用的国内镜像源也挂了，我们还需要切换到另一个国内镜像源，这就显得非常的棘手。如果您手动配置了国内镜像源，并且还经常的通过 `cargo publish` 发包的话 ，那么在发包之前，还需要将国内镜像源再手动切换为官方镜像。在比如，每一个国内镜像源同步镜像的时间是不一样的，如果您刚发了一个包并且想第一时间应用到您的项目中，但是因为国内镜像源的没有及时的同步镜像，而导致包无法下载，这个时候您还需要切换到官方镜像源来下载最新发布的包。每一次手动切换镜像的操作都是繁琐且耗时的，而 `crm` 就是为了解决上述的问题。\n\n\n\n## 安装\n\n### 通过 `cargo` 安装\n\n```bash\n# 在终端中执行\n# NOTE 最好使用官方镜像源来安装或升级\n\ncargo install crm\n```\n\n\n\n### 在 `Arch Linux` 上安装\n\n您可以从 Arch Linux 用户仓库 (AUR) 中安装它，感谢 [taotieren](https://github.com/taotieren) 为此做出的努力。\n\n- \u003chttps://aur.archlinux.org/packages/crm\u003e\n\n```bash\n# 在终端中执行\n\n# `yay` 是一个 AUR 包管理器，可以使用您喜欢的任何包管理器来安装它，例如 `paru`\nyay -S crm\n```\n\n- \u003chttps://aur.archlinux.org/packages/crm-git\u003e\n\n```bash\n# 在终端中执行\n\nyay -S crm-git\n```\n\n\u003e NOTE：`crm` 和 `crm-git` 都是基于源代码来构建二进制文件的，如果不想通过下载源代码的方式来构建，则可以到 [Github Release](https://github.com/wtklbm/crm/releases) 中下载预构建的二进制版本。\n\n\n\n### 手动下载预编译的二进制文件\n\n可以直接从 [Github Release](https://github.com/wtklbm/crm/releases) 下载预编译的二进制版本，将其下载后，保存到任意目录，然后将该目录放到操作系统的 PATH 环境变量中：\n - 如果使用的是 Windows 11 系统，则可以在搜索框中搜索 \"**编辑系统环境变量**\"，然后找到 \"**环境变量**\"，找到用户变量中的 \"**Path**\"，双击它，并添加自定义路径\n - 如果使用的是 macOS 或 Linux 系统，则可以将 `export PATH=\"$PATH:自定义路径\"` 添加到 `.zshrc` 或 `.bashrc` 文件中 (取决于使用的是哪种 Shell)\n\n通过这种安装方式，可以更加自由的管理该软件，半年甚至一年不更新也可以正常使用，可以用 `crm check-update` 来查询新版本，并进行更新。若要将 `crm` 批量安装到多台操作系统的话，这样会更加方便快捷。\n\n在下载二进制文件时，可能会遇到下载失败的情况，为此，可以使用 Github 镜像来加速下载。\n\n```bash\n# 在终端中执行\n\n# 使用 `https://hub.gitmirror.com/` 镜像来加速下载\n# 下载哪个版本，就将下面的 URL 部分进行相应的替换即可\ncurl -O https://hub.gitmirror.com/https://github.com/wtklbm/crm/releases/download/v0.2.1/crm_windows_amd64.tar.gz\n```\n\n\n\n## 使用\n\n`crm` 的原则是使用最小依赖，并尽可能的简化终端操作。您只需要在终端键入 `crm` 即可获得命令帮助信息。\n\n```bash\n# 在终端执行\n#\n# NOTE:\n#  - [args] 表示 args 是一个或多个可选参数\n#  - \u003cname\u003e 表示 name 是一个必填参数\n#\n# 下面这些命令在执行时会自动切换为官方镜像，避免了手动切换镜像的麻烦：\n#  - `crm install` 对应 `cargo install`\n#  - `crm publish` 对应 `cargo publish`\n#  - `crm update` 对应 `cargo update`\n#\n# `crm test` 命令一般用于进行全量测试，而 `crm best` 是切换到最优镜像的快速方式\n\n$ crm\n\n  crm best                    评估网络延迟并自动切换到最优的镜像\n    crm best git              仅评估 git 镜像源\n    crm best sparse           仅评估支持 sparse 协议的镜像源\n    crm best git-download     仅评估能够快速下载软件包的 git 镜像源 (推荐使用)\n    crm best sparse-download  仅评估能够快速下载软件包且支持 sparse 协议的镜像源 (推荐使用)\n  crm default                 恢复为官方默认镜像\n  crm install [args]          使用官方镜像执行 \"cargo install\"\n  crm list                    从镜像配置文件中获取镜像列表\n  crm publish [args]          使用官方镜像执行 \"cargo publish\"\n  crm remove \u003cname\u003e           在镜像配置文件中删除镜像\n  crm save \u003cname\u003e \u003caddr\u003e \u003cdl\u003e 在镜像配置文件中添加/更新镜像\n  crm test [name]             下载测试包以评估网络延迟\n  crm update [args]           使用官方镜像执行 \"cargo update\"\n  crm use \u003cname\u003e              切换为要使用的镜像\n  crm version                 查看当前版本\n  crm check-update            检测版本更新\n```\n\n\n- 根据 [反馈](https://github.com/wtklbm/crm/issues/11)，并不建议您使用 `ustc` 镜像源，它会限制并发\n- 以下镜像只能在更新 `git` 镜像仓库时获得加速效果，在下载包时无法获得加速效果：\n  - `tuna`\n  - `bfsu`\n  - `nju`\n  - ... 一切 `dl` 的值为 `https://crates.io/api/v1/crates` 的镜像都无法获得加速 (有关镜像详情，请参见 [constants.rs](https://github.com/wtklbm/crm/blob/main/src/constants.rs#L80) 文件)\n\n\n\n## 在项目中使用来自不同镜像源的依赖\n\n`crm` 在配置镜像源时，会默认在 `~/.cargo/config.toml` 中多增加一个 `registries` 属性对象，通过增加该属性对象，您就可以在项目中应用来自于不同镜像源的依赖。比如您在使用官方镜像源时，可以通过在项目的 `Cargo.toml` 文件中指定依赖的 `registry` 属性来使用不同的国内镜像源。如果您已经在使用国内镜像源了，那么也可以通过修改 `registry` 属性的方式来切换到其他的国内镜像源。以下是一个示例。\n\n\n\n\n```toml\n# Cargo.toml\n\n# 使用官方镜像源时，`registry` 属性可选的值为： `sjtu`, `tuna`, `ustc`, `rsproxy`, `bfsu`, `nju` ...\n# 如果您已经使用 `crm` 切换到了 `rsproxy` 镜像源，那么 `registry` 属性可选的值则为其他国内镜像：`sjtu`, `tuna`, `ustc`, `bfsu`, `nju` ...\n# 以此类推\n# 值得注意的是，在使用国内镜像源时，您无法直接通过修改 `registry` 属性的方式使用官方镜像源\n# 如果您想使用官方镜像源，那么请在终端执行 `crm default` 来切换到官方镜像\n\n[dependencies]\n# 使用 `ustc` 国内镜像来下载 `log` 依赖\nlog = {version = \"0.4.12\", registry = \"ustc\"}\n\n# 使用 `sjtu` 国内镜像来下载 `lazy_static` 依赖\nlazy_static = {version = \"1.4.0\", registry = \"sjtu\"}\n```\n\n\n\n\u003e NOTE：\n\u003e - 如果您刚安装 `crm`，那么请在终端执行一次：`crm default`，然后就可以在项目的 `Cargo.toml` 文件中配置 `registry` 属性了。\n\u003e - 从 Rust v1.39.0 版本开始，`~/.cargo/config.toml` 将被推荐使用，如果 `~/.cargo/config` 和 `~/.cargo/config.toml` 同时存在，则优先使用 `~/.cargo/config` 配置。\n\n\n\n## 使用 `sparse` 协议\n\n在 `v1.68.0` 版本中，新增了一个 `sparse` 协议。以前我们更新注册表默认都是通过克隆 `git` 仓库来实现的，在克隆 `git` 仓库时会出现明显的延迟，`sparse` 协议的好处就是不用再克隆镜像源仓库了，而是仅通过 HTTPS 从网络上查询和下载您所需要的包。虽然该协议避免了 `git` 克隆的步骤，但是当镜像源的网络不稳定时较容易出错。\n\n按照官方说法，使用该协议有两种方式：\n\n1. 将 `export CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse` 加入到 `.bashrc` 或 `.zshrc` 文件中\n2. 或者编辑 `~/.cargo/config.toml` 文件：\n    ```bash\n    [registries.crates-io]\n    protocol = \"sparse\"\n    ```\n\n但是，当您使用 `crm` 时，`crm` 自带了一些支持 `sparse` 协议的镜像源，它们是开箱即用的。只须执行 `crm best sparse` 或 `crm best sparse-download` 即可轻松切换到支持 `sparse` 协议的镜像源。\n\n如果您想了解更多的内容，请参考下面的链接：\n - \u003chttps://blog.rust-lang.org/2023/03/09/Rust-1.68.0.html#cargos-sparse-protocol\u003e\n - \u003chttps://doc.rust-lang.org/cargo/reference/config.html#registriescrates-ioprotocol\u003e\n - \u003chttps://github.com/rust-lang/cargo/issues/9069\u003e\n - \u003chttps://internals.rust-lang.org/t/call-for-testing-cargo-sparse-registry/16862/20\u003e\n - \u003chttps://blog.rust-lang.org/2022/06/22/sparse-registry-testing.html\u003e\n\n\n\n\n## 注意事项\n\n1. `v0.1.0` 版本以下的 `.crmrc` 配置文件和最新版本的配置文件并不能相互兼容，如果您正在使用小于 `v0.1.0` 的版本，当您更新到最新版本时，请手动删除 `~/.crmrc` 文件\n2. `crm` 会修改 `~/.cargo/config.toml` 文件来进行镜像源的切换，如果您使用的是小于 `v0.1.3` 的版本，那么当您使用 `crm` 切换镜像时，`~/.cargo/config.toml` 文件中的文档注释会被删除并且永远无法恢复，如果您在 `~/.cargo/config.toml` 文件中保存了笔记或者文档，请尽快更新到最新版，在最新版中，对此进行了优化，不再自动删除文档注释 (除修改的字段外)\n3. `crm` 默认会在 `~/.cargo/config.toml` 文件中增加一个 `env.git-fetch-with-cli` 属性，值为 `true`，在使用 `crm` 时您无法删除该选项，如果您不想使用 `Git` 可执行文件进行 `Git` 操作，请手动修改 `~/.cargo/config.toml` 文件并将 `git-fetch-with-cli` 的值修改为 `false`\n\n\n\n\n## 错误处理\n\n以下是 crm 异常结束的情况对照表：\n - 1: 写入的镜像名称有误\n - 2: 写入的镜像地址有误\n - 3: 写入的 `dl` 字段值有误\n - 4: 命令无效\n - 5: `config.toml` 配置文件解析失败 (格式有误或字段缺失)\n - 6: 属性名错误\n - 7: 不能删除内置镜像\n - 8: 要删除的镜像不存在\n - 9: 传入的参数错误\n - 10: 要进行下载测试的镜像不存在\n - 11: 要进行连接测试的镜像不存在\n - 12: `.crmrc` 配置文件解析失败 (格式有误或字段缺失)\n - 13: 写入文件失败，请检查权限\n - 14: 配置文件冲突，需手动检查\n\n\n\n\n## Others\n\n### rust-library-chinese\n\n`rust-library-chinese` 是 Rust 核心库和标准库的源码级中文翻译，可以用作 IDE 工具的中文智能提示，也可以基于翻译好的内容生成 Rust 中文 API 文档。\n\n- [从 Github 访问](https://github.com/wtklbm/rust-library-i18n)\n- [从 Gitee 访问](https://gitee.com/wtklbm/rust-library-chinese)\n\n\n\n\n## LICENSE\n\nMIT OR Apache-2.0\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwtklbm%2Fcrm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwtklbm%2Fcrm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwtklbm%2Fcrm/lists"}