把独立Git仓库加入Repo管理
Repo是谷歌开发的多git仓库管理工具,本质:repo管理多个git子仓库,每个子仓库对应一个manifest清单xml文件。
前提:已经初始化好repo工作目录(
.repo/目录存在)
两种场景
- 新增一个全新git仓库,纳入repo管理(最常用)
- 本地已有git工程,把它交给repo接管
场景1:新增远端Git仓库到Repo(标准流程)
1. 修改manifest清单
找到你的manifest仓库(一般在.repo/manifests/,是一个git仓库)
编辑 default.xml(或者你的自定义manifest文件)
<!-- 示例:新增一个仓库 -->
<project name="xxx/your_project"
path="your_project"
remote="origin"
revision="main"/>
字段解释:
name:远端仓库在remote上的仓库名(gerrit/gitee/gitlab上仓库名字)path:本地工作目录下存放路径,repo sync后就生成这个文件夹remote:引用manifest里定义的remote名称,对应git服务器地址revision:分支/tag/commit,一般写分支名如main/master
如果没有现成remote,在xml上方添加remote节点:
<remote name="origin" fetch="shturl.cc/lpmEb5wNo1"/>
2. 提交manifest修改
cd .repo/manifests
git add default.xml
git commit -m "add your_project repo"
# 推送到manifest远端仓库
git push
3. 同步代码,拉取新增仓库
repo sync your_project
执行完成,本地就出现your_project/目录,这个工程正式被repo管理。
后续
repo sync、repo forall都会包含这个新仓库。
场景2:本地已经有一个git仓库,想交给repo接管
⚠️不要手动复制文件夹,repo会管理
.git,手动操作容易冲突。
- 先把本地仓库代码推送到远端git服务器(必须要有远端仓库,repo不管理裸本地git)
- 删除本地这个文件夹(repo sync会重新下载)
- 按场景1,在manifest添加
<project>节点 repo sync your_project
repo会重新clone下来,历史commit完整保留,之后全部走repo操作。
❌错误做法:直接把已有git文件夹拷贝到工作目录,repo不会识别,repo sync还会覆盖删掉你的本地仓库。
常用配套命令
# 只同步新增的单个project
repo sync your_project
# 查看repo识别的所有项目,确认新增成功
repo list
# 在所有项目执行命令,验证新仓库生效
repo forall your_project -c "git status"
常见踩坑点
- revision写错,拉到旧代码:revision写分支名,不要写commit hash(除非固定版本)
- name/path搞混:
name是服务器仓库名;path是本地路径,两者可以不一样 - manifest修改后没有push远端:别的同事repo sync看不到新增仓库
- remote的fetch地址不对,报clone失败
拓展:不修改主manifest,本地临时添加(仅本机生效,不共享给其他人)
只自己本地测试,不想提交manifest仓库:
修改 .repo/manifests/default.xml,本地改完不要git commit,直接repo sync。
注意:执行
repo init重新初始化会丢失本地未提交的manifest修改,团队协作必须提交manifest到远端。
如果你需要,我可以给你一份完整可复制的default.xml最简样例,或者讲下如果是vendor下新增仓库的写法。

2007

被折叠的 条评论
为什么被折叠?



