跳转到内容

cnb-rs repo create ​

cnb-rs repo create <NAME> [OPTIONS]

创建新仓库。

不指定 --group 时,默认创建到当前认证用户的个人空间。 默认创建公开仓库,可通过 --private 或 --secret 切换可见性。

指定 --license 或 --gitignore 时,创建仓库后会自动推送初始文件(LICENSE / .gitignore)。 模板内容从 CNB 镜像仓库获取,可通过 ~/.cnb/config.toml 的 [templates] 段自定义仓库。

注意: CNB 的 create repo API 不支持服务端生成 license / gitignore(与 GitHub 不同), 因此 cnb-rs 采用客户端方案:创建仓库后本地 git init → 写入模板文件 → commit → push。

选项 ​

  • <NAME>: 仓库名称(必填)
  • --group <GROUP>: 所属组织(不指定则创建到个人空间)
  • -d, --description <TEXT>: 仓库描述
  • -l, --license <SPDX_ID>: 开源许可证(如 MIT / Apache-2.0;用 cnb-rs repo license list 查看可用值)
  • -g, --gitignore <TEMPLATE>: .gitignore 模板(如 Rust / Node;用 cnb-rs repo gitignore list 查看可用值)
  • --add-readme: 添加 README 文件(内容为 # 仓库名 + 描述)
  • --private: 创建私有仓库
  • --secret: 创建加密仓库
  • -c, --clone: 创建后克隆到本地

继承的全局选项:

  • --domain <DOMAIN>: 指定目标域名(默认:cnb.cool)

用法 ​

完整参数 ​

bash
cnb-rs repo create <NAME> \
  --group <ORG> \           # 所属组织
  -l <SPDX_ID> \            # --license,如 MIT / Apache-2.0
  -g <TEMPLATE> \           # --gitignore,如 Rust / Node
  --add-readme \            # 生成 README.md
  -d <DESCRIPTION> \        # 仓库描述(也作为 README 内容)
  -c                        # --clone,保留本地目录

指定 --license / --gitignore / --add-readme 任一时触发初始文件推送流程。

场景 A:不带 --clone(只想远端有文件,本地不留目录) ​

bash
cnb-rs repo create my-lib --group my-org -l MIT -g Rust --add-readme -d "A fast lib"

执行过程:

┌─────────────────────────────────────────────────────────────────┐
│ 1. 预校验:从模板仓库获取 MIT.txt 和 Rust.gitignore 内容       │
│    (失败则报错退出,不创建仓库)                               │
├─────────────────────────────────────────────────────────────────┤
│ 2. POST API 创建仓库 my-org/my-lib                             │
│    → ✓ 已创建仓库 my-org/my-lib                               │
├─────────────────────────────────────────────────────────────────┤
│ 3. 创建 tempdir(系统临时目录)                                 │
│    → git init                                                   │
│    → git remote add origin https://cnb.cool/my-org/my-lib.git  │
├─────────────────────────────────────────────────────────────────┤
│ 4. 写入文件:                                                   │
│    tempdir/README.md    ← "# my-lib\n\nA fast lib\n"           │
│    tempdir/LICENSE      ← MIT 模板内容                          │
│    tempdir/.gitignore   ← Rust 模板内容                         │
├─────────────────────────────────────────────────────────────────┤
│ 5. git add . → git commit -m "Initial commit" → git push       │
│    → ✓ 已推送初始文件:README.md + LICENSE + .gitignore        │
├─────────────────────────────────────────────────────────────────┤
│ 6. 删除 tempdir(本地不留痕迹)                                 │
├─────────────────────────────────────────────────────────────────┤
│ 7. stdout 输出:https://cnb.cool/my-org/my-lib                 │
└─────────────────────────────────────────────────────────────────┘

结果:远端仓库已有 3 个文件,本地无任何目录。

场景 B:带 --clone(远端推送 + 本地保留工作目录) ​

bash
cnb-rs repo create my-lib --group my-org -l MIT -g Rust --add-readme -d "A fast lib" --clone

执行过程:

┌─────────────────────────────────────────────────────────────────┐
│ 1. 预校验:从模板仓库获取 MIT.txt 和 Rust.gitignore 内容       │
│    (失败则报错退出,不创建仓库)                               │
├─────────────────────────────────────────────────────────────────┤
│ 2. POST API 创建仓库 my-org/my-lib                             │
│    → ✓ 已创建仓库 my-org/my-lib                               │
├─────────────────────────────────────────────────────────────────┤
│ 3. 创建 ./my-lib/ 目录(最终保留的工作目录)                    │
│    → git init                                                   │
│    → git remote add origin https://cnb.cool/my-org/my-lib.git  │
├─────────────────────────────────────────────────────────────────┤
│ 4. 写入文件:                                                   │
│    ./my-lib/README.md    ← "# my-lib\n\nA fast lib\n"          │
│    ./my-lib/LICENSE      ← MIT 模板内容                         │
│    ./my-lib/.gitignore   ← Rust 模板内容                        │
├─────────────────────────────────────────────────────────────────┤
│ 5. git add . → git commit -m "Initial commit" → git push       │
│    → ✓ 已推送初始文件:README.md + LICENSE + .gitignore        │
│    → ✓ 仓库已克隆到 ./my-lib                                  │
├─────────────────────────────────────────────────────────────────┤
│ 6. 保留目录(可直接 cd my-lib 开始工作)                        │
├─────────────────────────────────────────────────────────────────┤
│ 7. stdout 输出:https://cnb.cool/my-org/my-lib                 │
└─────────────────────────────────────────────────────────────────┘

结果:远端仓库有 3 个文件,本地 ./my-lib/ 已就绪(含 remote origin + 初始 commit)。

两者区别 ​

不带 --clone带 --clone
工作目录系统临时目录./仓库名/
push 后删除临时目录保留目录
用户得到远端仓库 + URL远端仓库 + URL + 本地工作目录

其他示例 ​

bash
# 创建公开仓库(最简)
$ cnb-rs repo create my-project --group my-org

# 创建私有仓库
$ cnb-rs repo create my-secret --group my-org --private

# 创建加密仓库
$ cnb-rs repo create my-vault --group my-org --secret

# 创建到个人空间
$ cnb-rs repo create my-app

# 只添加 README
$ cnb-rs repo create my-notes --group my-org --add-readme -d "学习笔记"

另请参阅 ​

Released under the MIT License.