git 如何合并多个无关的仓库,形成一个仓库?

2022-06-29 10:00:52 +08:00
 sillydaddy

应用场景是想偷懒把多个项目已经建好的仓库合并,用一个 git 仓库来管理,

举例来说,原项目 1 的仓库在文件夹 repo1 ,原项目 2 在文件夹 repo2...,项目之间没有依赖关系。现在新建一个新文件夹 repo ,然后将 repo1 和 repo2 都作为子文件夹放到 repo 中。但是如何把项目 1 和项目 2 的历史提交记录合并到一起呢?

2880 次点击
所在节点    git
17 条回复
ihaoz
2022-06-29 10:05:34 +08:00
git remote 设置远程仓库然后 merge 就行了,两个仓库所有的 commit 都会被保留。

参考:
https://segmentfault.com/a/1190000021919753
noe132
2022-06-29 10:05:42 +08:00
repo1 添加 repo2 为 remote ,然后 merge 进来就行了。
FengMubai
2022-06-29 10:06:43 +08:00
fpure
2022-06-29 10:07:05 +08:00
也把 objects 目录拷进来,然后建分支就可以了
Oktfolio
2022-06-29 10:11:23 +08:00
git merge <branch> --allow-unrelated-histories
xtinput
2022-06-29 10:12:43 +08:00
git submodule
dayeye2006199
2022-06-29 10:31:00 +08:00
别用 submodule ,难用反直觉
sillydaddy
2022-06-29 12:22:20 +08:00
@ihaoz
@noe132
试验了一下,补充一点,在 git merge --allow-unrelated-histories 之后,还需要使用 git mv 命令把文件移动到子文件夹。
sillydaddy
2022-06-29 12:25:01 +08:00
Inf1nity
2022-06-29 14:29:59 +08:00
楼上说的很对,git submodule 的设计很反直觉,简而言之就是非常烂,如果有替代方案的话不建议使用。
leo108
2022-06-29 14:32:27 +08:00
git subtree
sjhhjx0122
2022-06-29 14:32:56 +08:00
如果是前端项目 只是把所有库放一个仓库 monorepo 比如 pnpm 或者 lerna
duke807
2022-06-29 15:47:56 +08:00
@dayeye2006199
@Inf1nity
哪里反直覺,可以說說嗎?
sillydaddy
2022-06-30 08:49:12 +08:00
@sjhhjx0122
谢谢,我看看。
alexsunxl
2022-06-30 11:21:25 +08:00
@dayeye2006199
@Inf1nity
@duke807

说 submodule 难用可以。api 没那么方便也是。
但改用的情况你也得用上呀。
比如依赖他人的内部项目,不用 submodule 用啥。 直接拷贝过来,不得更新麻烦的吗?有些场景肯定用 submodule 方便呀
这种内部的仓库又不是公开发布的包, 用包管理器就能更新
Inf1nity
2022-06-30 12:41:14 +08:00
@alexsunxl #14 如果是本项目内部依赖别的项目 /仓库的话,子模块确实就是干这件事的最佳方案,但是楼主这里的前提是项目之间没有依赖关系,而且还要合并历史记录,这就有点复杂了,子模块不太能胜任这种场景。
hpu423
2022-07-08 14:06:27 +08:00
https://cheatsheet.wang/ 看看里面的 submodule ,subtree 都可以满足,主要是滴耦合

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX