# gitoxide-cli **Repository Path**: iJetLi/gitoxide-cli ## Basic Information - **Project Name**: gitoxide-cli - **Description**: Git CLI tool powered by gitoxide (Cangjie native Git library) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-17 - **Last Updated**: 2026-07-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # gitoxide-cli 基于 [gitoxide-cj](https://gitee.com/iJetLi/gitoxide-cj) 的命令行 Git 工具 — [gitoxide](https://github.com/Byron/gitoxide) 的仓颉语言移植版。 `gitoxide-cli`(以 `gitcj` 命令调用)提供了 Git 底层(plumbing)和高层(porcelain)命令,用于检查和操作仓库,类似于原版 gitoxide 中的 `gix` 二进制。 Video: [Bilibili](https://www.bilibili.com/video/BV1pxKB6hEVA ## 安装 ### 从源码构建 需要 [仓颉 SDK](https://cangjie-lang.cn/) 1.1.3+。 ```bash cjpm build ``` 二进制文件输出在 `target/release/bin/main.exe`(Windows)或 `target/release/bin/main`(Linux/macOS)。 ### 运行时依赖 在 Windows 上,TLS(HTTPS push)支持需要将以下 DLL 放置在二进制文件旁: - `libcangjie-runtime.dll` — 来自仓颉 SDK 运行时 - `libzlib4cj@cangjie_tpc.dll` — 来自构建输出 - `libssl-3-x64.dll` / `libcrypto-3-x64.dll` — 来自 OpenSSL 3(MinGW) - `libwinpthread-1.dll` — 来自 MinGW ## 使用 ``` gitcj [OPTIONS] 选项: -r, --repository 仓库路径(默认:当前目录) -c, --config 添加配置覆盖 -f, --format 输出格式:human, json(默认:human) -v, --verbose 增加详细程度 -s, --strict 使用严格模式 --object-hash 对象哈希类型:sha1, sha256(默认:sha1) -V, --version 打印版本 -h, --help 打印帮助 ``` ## 命令状态 ### 仓库命令 | 命令 | 状态 | 说明 | |------|------|------| | `init` | ✅ 已实现 | 初始化新的 Git 仓库 | | `clone` | ⚠️ 部分实现 | 克隆仓库(init + remote,尚未拉取 pack 数据) | | `fetch` | ⚠️ 部分实现 | 从远程拉取(协商已实现,pack 未写入 ODB) | | `push` | ✅ 已实现 | 推送到远程(HTTP/HTTPS + TLS,SSH 回退到系统 git) | | `status` | ✅ 已实现 | 显示工作区状态 | | `diff` | ✅ 已实现 | 显示树、提交或工作区之间的差异 | | `log` | ✅ 已实现 | 显示提交日志 | | `commit` | ✅ 已实现 | 创建提交(`-m` 指定消息,`-S` GPG 签名) | | `checkout` | ✅ 已实现 | 切换分支或恢复工作区文件 | | `branch` | ✅ 已实现 | 列出分支(`-a`、`-r`、`--contains`) | | `tag` | ✅ 已实现 | 列出标签对象 | | `merge` | ✅ 已实现 | 执行合并 | | `merge-base` | ✅ 已实现 | 查找提交间的合并基 | | `clean` | ✅ 已实现 | 删除未跟踪文件(`--dry-run`) | | `archive` | ✅ 已实现 | 创建工作树归档 | | `blame` | ✅ 已实现 | 显示文件每行的最后修改提交 | | `remote` | ✅ 已实现 | 与远程交互(列表、引用、ref-map、URL) | | `credential` | ✅ 已实现 | 凭证填充/批准/拒绝 | ### 底层命令 | 命令 | 状态 | 说明 | |------|------|------| | `cat` | ✅ 已实现 | 显示指定 revspec 处的对象 | | `odb` | ✅ 已实现 | 与对象数据库交互(信息、统计、存在性) | | `tree` | ✅ 已实现 | 与树对象交互 | | `index` | ✅ 已实现 | 与 `.git/index` 交互(条目、信息) | | `verify` | ✅ 已实现 | 验证仓库完整性 | | `fsck` | ✅ 已实现 | 检查缺失对象 | | `commit-graph` | ✅ 已实现 | 与 commit-graph 文件交互(列表、验证) | | `revision` | ✅ 已实现 | 查询修订信息(解析、describe、解析规范) | ### 配置与元数据命令 | 命令 | 状态 | 说明 | |------|------|------| | `config` | ✅ 已实现 | 列出仓库配置 | | `config-tree` | ⚠️ 桩实现 | 显示配置键树(硬编码输出) | | `attributes` | ✅ 已实现 | 查询 `.gitattributes` | | `exclude` | ✅ 已实现 | 查询 `.gitignore` / 排除文件 | | `mailmap` | ✅ 已实现 | 与 `.mailmap` 交互 | | `submodule` | ✅ 已实现 | 与子模块交互 | | `env` | ✅ 已实现 | 打印 Git 相关路径 | ### 工具命令 | 命令 | 状态 | 说明 | |------|------|------| | `is-clean` | ✅ 已实现 | 仓库干净则退出码为 0 | | `is-changed` | ✅ 已实现 | 仓库有变更则退出码为 0 | | `dirwalk` | ✅ 已实现 | 运行目录遍历 | | `worktree` | ✅ 已实现 | 与工作树交互 | | `free` | ✅ 已实现 | 不需要仓库的命令(discover、trust、pack、index 等) | ### Git 兼容别名 | 命令 | 状态 | 说明 | |------|------|------| | `hash-object` | ✅ 已实现 | 从文件计算对象 ID | | `cat-file` | ✅ 已实现 | 查看对象内容 | | `init` | ✅ 已实现 | 初始化新的 Git 仓库 | ### 尚未实现 | 命令 | 状态 | 说明 | |------|------|------| | `rebase` | ❌ 未实现 | 变基提交 | | `reset` | ❌ 未实现 | 重置当前 HEAD 到指定状态 | | `stash` | ❌ 未实现 | 暂存变更 | | `cherry-pick` | ❌ 未实现 | 应用指定提交的变更 | | `pull` | ❌ 未实现 | 拉取并合并 | | `add` | ❌ 未实现 | 将文件内容添加到索引 | | `rm` | ❌ 未实现 | 从工作区和索引中删除文件 | | `mv` | ❌ 未实现 | 移动或重命名文件 | ## 源文件列表 | 文件 | 说明 | |------|------| | `main.cj` | CLI 入口,参数解析,命令分发 | | `args.cj` | 参数类型和解析逻辑 | | `output.cj` | 输出格式化工具 | | `repo_helper.cj` | 仓库打开辅助函数 | | `cmd_archive.cj` | `archive` — 创建工作树归档 | | `cmd_attributes.cj` | `attributes` — 查询 .gitattributes | | `cmd_blame.cj` | `blame` — 逐行文件 blame | | `cmd_branch.cj` | `branch` — 列出和过滤分支 | | `cmd_cat.cj` | `cat` — 显示 revspec 处的对象 | | `cmd_checkout.cj` | `checkout` — 切换分支/恢复文件 | | `cmd_clean.cj` | `clean` — 删除未跟踪文件 | | `cmd_clone.cj` | `clone` — 克隆仓库 | | `cmd_commit.cj` | `commit` — 创建/验证/签名/describe 提交 | | `cmd_commitgraph.cj` | `commit-graph` — 与 commit-graph 文件交互 | | `cmd_compat.cj` | Git 兼容子命令(hash-object、cat-file、init) | | `cmd_config.cj` | `config` — 列出仓库配置 | | `cmd_config_tree.cj` | `config-tree` — 显示配置键树 | | `cmd_credential.cj` | `credential` — 凭证填充/批准/拒绝 | | `cmd_diff.cj` | `diff` — 显示差异 | | `cmd_dirty.cj` | `is-clean` / `is-changed` — 检查仓库脏状态 | | `cmd_dirwalk.cj` | `dirwalk` — 目录遍历 | | `cmd_env.cj` | `env` — 打印 Git 相关路径 | | `cmd_exclude.cj` | `exclude` — 查询 .gitignore | | `cmd_fetch.cj` | `fetch` — 从远程拉取 | | `cmd_free.cj` | `free` — 不需要仓库的命令 | | `cmd_fsck.cj` | `fsck` — 检查缺失对象 | | `cmd_index.cj` | `index` — 与 .git/index 交互 | | `cmd_log.cj` | `log` — 显示提交日志 | | `cmd_mailmap.cj` | `mailmap` — 与 .mailmap 交互 | | `cmd_merge.cj` | `merge` — 执行合并 | | `cmd_merge_base.cj` | `merge-base` — 查找合并基 | | `cmd_odb.cj` | `odb` — 与对象数据库交互 | | `cmd_push.cj` | `push` — 推送到远程 | | `cmd_remote.cj` | `remote` — 与远程交互 | | `cmd_revision.cj` | `revision` — 查询修订信息 | | `cmd_status.cj` | `status` — 显示工作区状态 | | `cmd_submodule.cj` | `submodule` — 与子模块交互 | | `cmd_tag.cj` | `tag` — 列出标签对象 | | `cmd_test.cj` | `test` — 内部测试命令 | | `cmd_tree.cj` | `tree` — 与树对象交互 | | `cmd_verify.cj` | `verify` — 验证仓库完整性 | | `cmd_worktree.cj` | `worktree` — 与工作树交互 | | `cli_test.cj` | CLI 集成测试 | ## 与 gitoxide 的关系 本 CLI 对应原版 [gitoxide](https://github.com/Byron/gitoxide) 中的 `gix` 二进制。命令集和输出格式紧密跟随原版,同时做了仓颉运行时环境的适配。 ## 许可证 基于 [MIT 许可证](LICENSE) 授权。