{"id":20064882,"url":"https://github.com/baidu/m-git","last_synced_at":"2025-04-05T12:05:35.030Z","repository":{"id":47883606,"uuid":"350624242","full_name":"baidu/m-git","owner":"baidu","description":"MGit 是一款基于 Git 的多仓库管理工具，可以安全的、高效的管理多个 Git 仓库； 适合于在多个仓库中进行关联开发的项目，实现批量的版本管理功能，提高 Git 操作的效率，避免逐个执行 Git 命令带来的误操作风险。","archived":false,"fork":false,"pushed_at":"2021-08-12T04:16:08.000Z","size":880,"stargazers_count":177,"open_issues_count":6,"forks_count":17,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-29T11:07:08.105Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/baidu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-03-23T07:51:18.000Z","updated_at":"2025-03-13T02:40:50.000Z","dependencies_parsed_at":"2022-08-20T13:10:38.904Z","dependency_job_id":null,"html_url":"https://github.com/baidu/m-git","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Fm-git","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Fm-git/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Fm-git/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/baidu%2Fm-git/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/baidu","download_url":"https://codeload.github.com/baidu/m-git/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247332604,"owners_count":20921853,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T13:48:05.725Z","updated_at":"2025-04-05T12:05:35.011Z","avatar_url":"https://github.com/baidu.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MGit\n\nMGit 是一款 Ruby 封装的基于 Git 的多仓库管理工具，可以高效的、同时的对多个 Git 仓库执行 Git 命令。\n适合于在多个仓库中进行关联开发的项目，提高 Git 操作的效率，避免逐个执行 Git 命令带来的误操作风险。\n\n- **易用的命令**\n封装 Git 命令，命令和参数均由 Git 衍生而来，会使用 Git 就可以成本低上手 MGit。\n\n- **直观高效的执行命令**\n提供图表化的结果展示，开发者可以快速查看命令在多个仓库的执行结果；\n多线程并发执行多仓库命令，通过仓库缓存机制提高仓库的拉取效率；\n\n- **安全的执行命令**\n在执行命令前对多仓库状态进行安全检查：分支是否异常，工作区是否未提交代码等；\n对 .git 进行托管与 Git 工作区分类，避免误删丢失改动或提交；\n执行存在风险的操作时，会给与风险操作提示，避免误操作；\n\n- **方便扩展**\n支持加载 ruby-gem 包作为插件，gem 包名格式 `m-git-${suffix}`和`mgit-${suffix}`\n快速的扩展 MGit 的命令，增加自定义命令，扩展已有命令的功能；\n提供类似`git hook`的 hook 点，方便开发者实现自定义逻辑；\n\n## 快速开始\n  #### 1、安装 MGit 工具\n\n环境要求：\n\n- 系统：支持 macOS、Ubuntu，暂时不支持 Windows\n- Ruby版本: \u003e= 2.3.7\n\n```ruby\n$ gem install m-git\n```\n\n#### 2、初始化多仓库 \n\n初始化多仓库使用 `mgit init` 命令;\n\n类似于 Git 从远程 clone 新仓库, 会将多个仓库 clone 到本地;\n\n下面通过一个 demo 体验一下 MGit 命令：\n\n```ruby\n# 2.1 建议在一个新文件夹中拉取demo\n$ mgit init -g https://github.com/baidu/m-git.git\n\n# 2.2 体验一下mgit命令\n$ mgit -l                 显示所有mgit管理的仓库\n$ mgit branch --compact   查看多仓库的分支\n$ mgit status             产看仓库分支超前/落后情况\n```\n\n\n#### 3、已有多仓库如何迁移到 MGit 管理\n\n- 根据文档[配置 manifest.json](docs/config/manifest.md)\n\n  将要管理的仓库都配置到 manifest.json 中\n  \n- 将 manifest.json 放到一个仓库中管理\n\n  这个仓库同样会在 manifest.json 中描述，并且需要配置 \"config-repo\": true \n  \n  这个仓库称为配置仓库，也叫做**主仓库**，其他仓库叫做**子仓库**\n     \n- 使用 `mgit init -f manifest文件路径` 初始化多仓库，命令测试 manifest.json 配置是否正常\n\n  注意这个命令不会重复拉取主仓库，只会拉取所有的子仓库到当前目录，并在当前目录创建一个.mgit\n  \n  你可以在当前目录中看到每个仓库的源码，他们的路径可以通过  manifest.json 的 dest字段配置\n  \n  你也可以在 .mgit/source-git/ 下看到所有仓库的.git, 这是 MGit 对所有仓库的托管\n  \n- 本地测试成功后，你可以提交主仓库中的 manifest.json，推送主仓库的变更到远端\n  \n- 通过 `mgit init -g 主仓库地址` 命令初始化多仓库\n  \n\n#### 4、进一步了解 MGit\n\n[常用命令](docs/use/common-commands.md)\n\n[manifest文件介绍](docs/config/manifest.md)\n\n[配置多仓库](docs/config/config-env.md) \n\n[使用 MGit 管理多仓库的案例](docs/use/how-to-start.md#4-mgit-) \n\n[了解更多](docs/references.md)\n\n\n## 测试\n\n单测在MGit仓库内的test文件夹下\n新建单测文件，必须以‘test_’开头\n执行单测：rake （如果报错尝试执行 bundle install）\n\n\n## 如何贡献\n\n欢迎开发者向 MGit 贡献代码。如果您开发了新功能或发现了 bug，欢迎给我们提交PR。\n\n代码贡献要求：\n1. 功能和实现应该具有通用性, 不是为了解决某个具体业务而定制的代码逻辑\n2. 代码质量高，符合 Ruby 编码规范\n3. 需要补充对应的单测 case\n\nissues贡献： 如在使用中遇到问题，请在 https://github.com/baidu/m-git/issues 新建 issues 反馈问题。\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaidu%2Fm-git","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbaidu%2Fm-git","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbaidu%2Fm-git/lists"}