1 个不稳定版本
0.2.1 | 2024年6月1日 |
---|---|
0.2.0 |
|
0.1.4 |
|
0.1.2 |
|
0.0.4 |
|
#427 在 开发工具 中
每月106 次下载
99KB
2K SLoC
magoo
这个 是 Magoo,它可以帮助你轻松管理 git 子模块,就像
npm
或 cargo
,但适用于子模块。
添加子模块很简单,但你是否曾经遇到过
- 如何更新子模块?
- 如何删除子模块?
- 我在更新子模块后,如何让同事知道如何更新他们的子模块?
通过为我们运行
git
命令来帮助我们。它会从 git 仓库本身获取所有相关信息。无需额外的文件,并且 可以直接在所有带有子模块的 git 仓库中工作。
不喜欢管道。请简单地让您的管道检查子模块(如果需要递归的话)。例如,如果您正在使用 GitHub Actions
- uses: actions/checkout@v4
with:
submodules: recursive
安装 
作为 CLI 工具
cargo install magoo
作为库
将 添加为依赖项
cargo add magoo
更多信息请参阅 https://docs.rs/magoo
使用 
使用子进程运行
git
命令,因此您必须在系统上安装 git
。默认情况下, 会检查是否支持
git
版本。要手动打印支持哪些版本,请运行
magoo status --git
不支持版本的 也可能正常工作,您可以使用
--allow-unsupported
标志(注意它需要放在子命令之前)来让 知道。
magoo --allow-unsupported status
添加子模块
magoo install URL PATH
(运行 magoo install --help
可查看完整选项列表)
添加子模块的参数与 git submodule add
非常相似
添加子模块需要知道以下信息。
参数 | 描述 | 默认值 |
---|---|---|
URL |
类似于 https://github.com/owner/repo 的 Git URL。SSH 和相对 URL 也可以使用。有关详细信息,请参阅 git submodule add |
URL 是必需的 |
PATH |
模块应存在的路径 | 顶级目录中与子模块仓库同名的目录 |
BRANCH |
当您运行 magoo update 时要更新的分支 |
无(HEAD ) |
NAME |
用于识别子模块的其他命令的名称 | 与 PATH 相同 |
建议始终指定 BRANCH。默认情况下,Git 会使用
HEAD
分支,这通常不是您想要的。
添加子模块时不会递归克隆。如果需要,可以在 add
后运行 magoo install
来克隆递归子模块。
初始化/拉取子模块
magoo install
会确保子模块被克隆/更新到索引中存储的提交。每次您从其他人那里拉取更改时,都应该运行
magoo install
,以防它们已被更新。它还会删除其他人删除的子模块(通过运行 status --fix
,见下文)。
默认情况下,会递归安装子模块,您可以使用 --no-recursive
仅安装顶级仓库指定的子模块。
显示子模块状态
magoo status [--long] [--fix]
会显示它所知道的所有关于当前仓库中的子模块的信息。
使用 --fix
选项可以将子模块状态恢复到 所期望的稳定状态。如果 Git 文件被手动修改或通过运行单独的
git
命令,或因远程变更,可能会导致状态不一致。
会通过取消初始化子模块(如果可能)或删除子模块来修复状态。
更新子模块
magoo update
这会指示 将所有子模块更新为与远程
BRANCH
(在添加子模块时指定)同步。更多信息请参阅 magoo update --help
。
您还可以
- 更新一个子模块到最新版本
magoo update NAME
- 更改子模块的分支和/或 URL
magoo update NAME --branch BRANCH --url URL
删除子模块
magoo remove NAME
可以使用此单条命令删除子模块的所有痕迹。
注意:Git 的新版本允许您使用 git rm
删除子模块。然而,它不会删除 .git/modules
中的内容。 会删除这些内容。
依赖
~2–12MB
~143K SLoC