如何分叉monorepo的一部分,仍然能够合并上游提交?

问题描述 投票:1回答:2

有时我在GitHub上发现monorepo,它由多个npm软件包组成,我想对其进行一些修改并将其用于我的项目中。但是npm从git子目录安装软件包比从git仓库[1] [2]安装要困难得多。因为我要进行自己的修改,所以我想知道如何设置自己的git存储库,以便npm易于安装,并且我可以合并上游更改。

[目前,我使用GitHub上的this guide将软件包与monorepo的其余部分分开,例如

git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME 

Npm可以轻松安装仓库,但是我发现很难合并任何上游变更。

有人做过吗?有什么主意吗?

git git-subtree monorepo
2个回答
3
投票

实际上,我想我错过了一些事情-合并上游更改并不像我想的那么难,因为git子树拆分是确定性的,即,无论重复多少次,它都会为相同的子树拆分生成相同的SHA1。 >


所以这是我的解决方案:

  1. 克隆monorepo
  2. 将默认分支(母版)重命名为其他名称,例如上游

  3. git checkout master
    git branch -m upstream
    
  4. 从monorepo拆分子目录

  5. git checkout upstream
    git subtree split -P <subdirectory path> -b master
    

    现在我们有一个master分支,那里只有与子目录路径相关的提交。

  6. ((可选)

  7. 设置master分支的远程并将其推送到GitHub。

    现在,如果上游monorepo添加了一些更改:

  1. 签出上游分支并进行更改

    git checkout upstream
    git pull
    
  2. 再次分裂

  3. git subtree split -P <subdirectory path> -b upstream-patch
    

    检查修订图,您将看到新分支(上游补丁)与master相关。

    gitk master upstream-patch
    
  4. 现在只需将新分支合并为master

  5. git checkout master
    git merge upstream-patch
    

    手动解决任何合并冲突。

  6. ((可选)
  7. git push

0
投票

这不可能派生出一个单一存储库的一部分,因为git无法计算出良好的Sha1以便能够与上游同步。

© www.soinside.com 2019 - 2024. All rights reserved.