【问题标题】:How to fork part of a monorepo and still be able to merge upstream commits?如何分叉部分monorepo并且仍然能够合并上游提交?
【发布时间】:2018-12-27 03:02:25
【问题描述】:

有时我会在 GitHub 上找到由多个 npm 包组成的 monorepo,我想对其进行一些修改并在我的项目中使用它。但是对于 npm 来说,从 git 子目录安装包比从 git 存储库安装要困难得多[1][2]。由于我会自己进行修改,所以我想知道如何设置自己的 git 存储库,以便 npm 安装和合并上游更改。

目前,我使用来自 GitHub 的 this guide 将包与 monorepo 的其余部分拆分,即

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

Npm 可以轻松安装 repo,但我发现很难合并任何上游更改。

以前有人做过吗?有什么想法吗?

【问题讨论】:

    标签: git git-subtree monorepo


    【解决方案1】:

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

    但也许您正在寻找“稀疏结帐”。 这使您可以在工作目录中选择所需的子目录。

    例如见https://gist.github.com/sumardi/5559896http://schacon.github.io/git/git-read-tree.html#_sparse_checkout

    【讨论】:

    • 感谢您的回答。但是即使我使用稀疏结帐,我也可能不会将所有内容从子目录中移动到根目录,对吧?例如。旧文件夹结构是/a/package.json/a/src/something.js/b/package.json/c/package.json,因为我只想要一个,所以新文件夹需要是/package.json/src/something.js。即使/b//c/被删除,如果它仍然在/a/中也没关系,因为npm仍然无法从/a/(子目录)安装
    • 不,你不能移动东西。
    【解决方案2】:

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


    所以这是我的解决方案:

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

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

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

      现在我们有一个主分支,其中只有与子目录路径相关的提交。

    4. (可选)设置master分支的远程并推送到GitHub。

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

    1. 检查上游分支并拉取更改

      git checkout upstream
      git pull
      
    2. 再次拆分

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

      查看修订图,你会看到新分支(upstream-patch)与master相关。

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

      git checkout master
      git merge upstream-patch
      

      手动解决任何合并冲突。

    4. (可选) git push

    【讨论】:

      猜你喜欢
      • 2019-01-25
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多