多仓库移植 MGit 管理 - 实操作

多仓库移植 MGit 管理 - 实操作

MGit

MGit 是一款 Ruby 封装的基于 Git 的多仓库管理工具,可以高效的、同时的对多个 Git 仓库执行 Git 命令。 适合于在多个仓库中进行关联开发的项目,提高 Git 操作的效率,避免逐个执行 Git 命令带来的误操作风险。
链接: <u>https://github.com/baidu/m-git/</u>

实操

一、准备工作

  • 配置SSH
  • 安装MGit工具
  • 拉取demo并体验

1、配置SSH
需要特别说明 使用MGit方式必须要配置SSH。

2、安装 MGit 工具

环境要求:

  • 系统:支持 macOS、Ubuntu,暂时不支持 Windows
  • Ruby版本: >= 2.3.7
$ gem install m-git

2、拉取demo并体验(初始化多仓库—)

初始化多仓库使用 mgit init 命令;

类似于 Git 从远程 clone 新仓库, 会将多个仓库 clone 到本地;

下面通过一个 demo 体验一下 MGit 命令:

2.1 建议在一个新文件夹中拉取demo

$ mgit init -g https://github.com/baidu/m-git.git

2.2 体验一下mgit命令

$ mgit -l                 显示所有mgit管理的仓库
$ mgit branch --compact   查看多仓库的分支
$ mgit status             产看仓库分支超前/落后情况

二、已有仓库迁移到MGit管理

1、根据文档 配置 manifest.json 文件

配置manifest文件,将要管理的仓库按照规定的格式放到这个文件中。

经过实测,我的manifest.json文件如下:

{
    # 主仓库git地址,mainProject.git不需要写
    "remote": "git@gitee.com:yxxxxxxe", 
    "version":1,
    "mgit-excluded": false,
    // 子仓库的本地路径可以在这里统一设置
    "dest": "../Developments",
    "repositories": {
        "MainProject": {
            // 主仓库的本地路径最好重新设置
            "abs-dest": "./",
            "remote-path": "mainProject.git",
            "config-repo": true
        },
        "SKSugarSwift": {
            "remote": "git@github.com:yxxxxxxe",
            "remote-path": "SKSugarSwift.git"
        }
    }
}

简单解释一下注意事项:

  • 需要注意的是,为方便管理,需要将主仓库MainProjectabs-dest路径,像文件中这样设置为跟 manifest.json 同目录下"abs-dest": "./"
  • 如果主仓库的 abs-dest 不重新设置,那么所有仓库(主仓库跟所有子仓库)都将在 “../Developments” 路径下。
  • 其它子仓库的abs-dest可以不设置,会自动在“../Developments” 路径下新建跟子仓库同名的文件夹,将子仓库的内容放到里面。
  • 当然也可以不设置外层的dest字段,即将dest字段留空,然后在主仓库和所有子仓库下的abs-dest字段设置本地路径。

注意:这里的目录结构跟demo中的目录结构不一致。具体就是通过manifest.json文件设置的。

2、将manifest.json文件放到主仓库的目录下

  • 主仓库也需要在manifest文件中配置,并且需要将主仓库的config-repo字段配置为true,即 "config-repo": true
  • 其它仓库称为子仓库。

3、测试

使用 mgit init -f manifest-path 命令测试 manifest.json 配置是否正常。
注意manifest-path 就是 manifest.json文件的路径

注意这个命令不会重复拉取主仓库,只会拉取所有的子仓库到当前目录,并在当前目录创建一个.mgit文件夹

你可以在当前目录中看到每个仓库的源码,他们的路径可以通过 manifest.jsondest字段配置。

你也可以在.mgit/source-git/ 下看到所有仓库的.git, 这是 MGit 对所有仓库的托管。

4、提交manifest.json到远端仓库

本地测试成功后,你可以提交主仓库中的 manifest.json,推送主仓库的变更到远端。
可以连同.mgit隐藏文件夹一同推送。

5、mgit方式管理

其实这里有2种使用方式,一是本地已经有主仓库了直接使用mgit,二是在新目录下直接使用mgit拉取并管理。

5.1 直接使用

经过第3步的测试,在manifest.json文件同目录下已经自动生成了一个.mgit的隐藏文件夹,在这个同目录下,就可以使用mgit命令了。

当使用任何一个正确的 mgit 命令时,它就会先帮你拉取远端仓库(如果本地路径不存在的话)。

需要特别注意的是,如果本地已经有主仓库,并且子仓库也在manifest.json文件配置的路径中,那么在主仓库中使用mgit命令时,.mgit隐藏文件夹内的source-git文件夹内不会生成手动下载的子仓库的.git隐藏文件夹,因为source-git这个文件夹用来保存着使用mgit命令下载的子仓库的.git隐藏文件夹。

如果所有子仓库都在对应目录下,甚至.mgit隐藏文件夹内连source-git文件夹都不会自动生成,因为所有子仓库都不是使用mgit命令自动拉取的。

5.2 新目录拉取

在一个新目录或者新设备上,安装了mgit之后,可以使用mgit的初始化仓库命令拉取一套新的多仓库在本地使用。

# mgit初始化多仓库命令
$ mgit init -g 主仓库地址
6、本地配置表 local_manifest 只共同操作特定子仓库

如果本地只需要操作某几个子仓库,其它仓库不需操作,可以通过创建local_manifest.json临时修改多仓库配置,在不修改manifest.json的情况下对配置进行调整,达到只操作某几个子仓库的目的。

将字段mgit-excluded设置为false,即"mgit-excluded": false

local_manifest的创建和配置方式请查看链接中的3.本地配置表local_manifest
https://github.com/baidu/m-git/blob/master/docs/config/manifest.md

bug 2023-04-08

在实践过程中,发现一个bug
1、使用 mgit init -g xxxxx.git 命令时,生成的本地目录结构与 manifest.json 中描述的不一致!

2、然后再次使用正确的 mgit 命令(如 mgit status),或者本地本来就有主工程,然后移植到 mgit 管理的话,就会自动拉取子仓库,这时候本地目录结构就与 manifest.json 中描述的一致了。

详见提的 issue:https://github.com/baidu/m-git/issues/14

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容