
应用场景是想偷懒把多个项目已经建好的仓库合并,用一个 git 仓库来管理,
举例来说,原项目 1 的仓库在文件夹 repo1 ,原项目 2 在文件夹 repo2...,项目之间没有依赖关系。现在新建一个新文件夹 repo ,然后将 repo1 和 repo2 都作为子文件夹放到 repo 中。但是如何把项目 1 和项目 2 的历史提交记录合并到一起呢?
1 ihaoz 2022 年 6 月 29 日 |
2 noe132 2022 年 6 月 29 日 via Android repo1 添加 repo2 为 remote ,然后 merge 进来就行了。 |
3 FengMubai 2022 年 6 月 29 日 |
4 fpure 2022 年 6 月 29 日 也把 objects 目录拷进来,然后建分支就可以了 |
5 Oktfolio 2022 年 6 月 29 日 git merge <branch> --allow-unrelated-histories |
6 xtinput 2022 年 6 月 29 日 git submodule |
7 dayeye2006199 2022 年 6 月 29 日 via Android 别用 submodule ,难用反直觉 |
8 sillydaddy OP |
9 sillydaddy OP @sillydaddy 参考的是 https://stackoverflow.com/questions/13040958/merge-two-git-repositories-without-breaking-file-history 另外 @xtinput @dayeye2006199 submodule 确实也是一个方案,还没试过。 |
10 Inf1nity 2022 年 6 月 29 日 楼上说的很对,git submodule 的设计很反直觉,简而言之就是非常烂,如果有替代方案的话不建议使用。 |
11 leo108 2022 年 6 月 29 日 git subtree |
12 linkopeneyes 2022 年 6 月 29 日 如果是前端项目 只是把所有库放一个仓库 monorepo 比如 pnpm 或者 lerna |
13 duke807 2022 年 6 月 29 日 via Android |
14 sillydaddy OP @sjhhjx0122 谢谢,我看看。 |
15 alexsunxl 2022 年 6 月 30 日 @dayeye2006199 @Inf1nity @duke807 说 submodule 难用可以。api 没那么方便也是。 但改用的情况你也得用上呀。 比如依赖他人的内部项目,不用 submodule 用啥。 直接拷贝过来,不得更新麻烦的吗?有些场景肯定用 submodule 方便呀 这种内部的仓库又不是公开发布的包, 用包管理器就能更新 |
16 Inf1nity 2022 年 6 月 30 日 @alexsunxl #14 如果是本项目内部依赖别的项目 /仓库的话,子模块确实就是干这件事的最佳方案,但是楼主这里的前提是项目之间没有依赖关系,而且还要合并历史记录,这就有点复杂了,子模块不太能胜任这种场景。 |
17 hpu423 2022 年 7 月 8 日 https://cheatsheet.wang/ 看看里面的 submodule ,subtree 都可以满足,主要是滴耦合 |