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