V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
sillydaddy
V2EX  ›  git

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

  •  
  •   sillydaddy · 48 天前 · 2096 次点击
    这是一个创建于 48 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    说 submodule 难用可以。api 没那么方便也是。
    但改用的情况你也得用上呀。
    比如依赖他人的内部项目,不用 submodule 用啥。 直接拷贝过来,不得更新麻烦的吗?有些场景肯定用 submodule 方便呀
    这种内部的仓库又不是公开发布的包, 用包管理器就能更新
    Inf1nity
        16
    Inf1nity  
       47 天前
    @alexsunxl #14 如果是本项目内部依赖别的项目 /仓库的话,子模块确实就是干这件事的最佳方案,但是楼主这里的前提是项目之间没有依赖关系,而且还要合并历史记录,这就有点复杂了,子模块不太能胜任这种场景。
    hpu423
        17
    hpu423  
       39 天前
    https://cheatsheet.wang/ 看看里面的 submodule ,subtree 都可以满足,主要是滴耦合
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1722 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 17:14 · PVG 01:14 · LAX 10:14 · JFK 13:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.