git 如何合并多个无关的仓库,形成一个仓库? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
sillydaddy
5.49D
4.63D
V2EX    git

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

  •  
  •   sillydaddy 2022 年 6 月 29 日 3636 次点击
    这是一个创建于 1295 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    说 submodule 难用可以。api 没那么方便也是。
    但改用的情况你也得用上呀。
    比如依赖他人的内部项目,不用 submodule 用啥。 直接拷贝过来,不得更新麻烦的吗?有些场景肯定用 submodule 方便呀
    这种内部的仓库又不是公开发布的包, 用包管理器就能更新
    Inf1nity
        16
    Inf1nity  
       2022 年 6 月 30 日
    @alexsunxl #14 如果是本项目内部依赖别的项目 /仓库的话,子模块确实就是干这件事的最佳方案,但是楼主这里的前提是项目之间没有依赖关系,而且还要合并历史记录,这就有点复杂了,子模块不太能胜任这种场景。
    hpu423
        17
    hpu423  
       2022 年 7 月 8 日
    https://cheatsheet.wang/ 看看里面的 submodule ,subtree 都可以满足,主要是滴耦合
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1664 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 16:27 PVG 00:27 LAX 08:27 JFK 11:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86