如何优雅地抽离 Rust 子工程:以 rumqttd 为例

下载工具git-filter-repo

python 复制代码
# macOS
brew install git-filter-repo
# Debian/Ubuntu
sudo apt-get install git-filter-repo
# or via pip
pip install git-filter-repo

克隆上游裸仓库

bash 复制代码
git clone --mirror https://gitlab.com/rumqtt/rumqttd.git rumqttd.git
cd rumqttd.git          # 注意:裸仓库,无工作区

裸仓库能一次带下所有分支 / tag,且速度快。


过滤:只保留子目录并"脱壳"(只保留需要的目录,脱壳)

css 复制代码
# ① 仅保留 rumqttd/src 和 Cargo*,其它全部丢弃
# ② 把 rumqttd/ 这一层目录去掉(即 rumqttd/src/foo.rs 变成 src/foo.rs)
git filter-repo \
  --path rumqttd/src \
  --path rumqttd/Cargo.toml \
  --path rumqttd/Cargo.lock \
  --path-rename rumqttd/:

从刚才裁剪后的裸仓库再克隆出一个"普通仓库"

你当前在 work/ 目录,而不是刚才的 rumqttd.git

bash 复制代码
 
git clone rumqtt.git rumqttd-lite          # 目录名随意
cd rumqttd-lite

看看有哪些分支,HEAD 通常已经指向 main

css 复制代码
git branch -a

如果 HEAD 不是 main,可手动

css 复制代码
git checkout main

添加新的远程(GitHub / GitLab 皆可)

bash 复制代码
# 如果要推到内部 GitLab,就把 URL 换成对应地址
git remote add origin git@github.com:someone/rumqttd.git

一次性推送所有分支 + tag

perl 复制代码
git push --all origin     # 推送分支
git push --tags origin    # 推送标签
# 或者直接   git push --mirror origin   (连同 refs/notes 等一起推)
相关推荐
doiito1 小时前
【Agent Harness】Gliding Horse L2 作战地图深度优化:给多 Agent 上下文装上“精准导航”
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小8 小时前
Rust图像处理第8节-暗角 & 复古胶片特效:四周衰减中心高亮
rust·webassembly·图形学
独孤留白1 天前
从C到Rust:Rust 的 Trait 不是Interface,那是什么?
rust
花褪残红青杏小1 天前
Rust图像处理第7节-马赛克像素化:分块取平均色实现打码风格
rust·webassembly·图形学
doiito2 天前
【Agent Harness】Gliding Horse 设计细节 -- 不跟风开发自己的AI Agent
架构·rust·agent
doiito2 天前
【Agent Harness】Gliding Horse 核心设计理念,不跟风开发自己的AI Agent
ai·rust·架构设计·系统设计·ai agent
花褪残红青杏小2 天前
Rust图像处理第6节- 均值模糊 & 中值模糊:3×3 邻域的两种经典玩法
rust·webassembly·图形学
子兮曰3 天前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust
星栈3 天前
写 Dioxus Demo 不难,难的是把它写成项目
前端·rust·前端框架
mCell3 天前
【锐评】桌面端技术营销:别拿跑分当工程判断
前端·rust·electron