git
› Pro Git
› Atlassian Git Tutorial
› Pro Git 简体中文翻译
› GitX
sillydaddy
5.44D
4.98D
V2EX  ›  git

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

  •  
  •   sillydaddy · Jun 29, 2022 · 4452 views
    This topic created in 1597 days ago, the information mentioned may be changed or developed.

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

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

    17 replies  •  2022-07-08 14:06:27 +08:00
    ihaoz
    ihaoz
    Jun 29, 2022
    1
    git remote 设置远程仓库然后 merge 就行了,两个仓库所有的 commit 都会被保留。

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

    说 submodule 难用可以。api 没那么方便也是。
    但改用的情况你也得用上呀。
    比如依赖他人的内部项目,不用 submodule 用啥。 直接拷贝过来,不得更新麻烦的吗?有些场景肯定用 submodule 方便呀
    这种内部的仓库又不是公开发布的包, 用包管理器就能更新
    Inf1nity
    Inf1nity
    Jun 30, 2022
    16
    @alexsunxl #14 如果是本项目内部依赖别的项目 /仓库的话,子模块确实就是干这件事的最佳方案,但是楼主这里的前提是项目之间没有依赖关系,而且还要合并历史记录,这就有点复杂了,子模块不太能胜任这种场景。
    hpu423
    hpu423
    Jul 8, 2022
    17
    https://cheatsheet.wang/ 看看里面的 submodule ,subtree 都可以满足,主要是滴耦合
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2535 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 12:05 · PVG 20:05 · LAX 04:05 · JFK 07:05
    ♥ Do have faith in what you're doing.