有时我在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子树拆分是确定性的,即,无论重复多少次,它都会为相同的子树拆分生成相同的SHA1。 >
所以这是我的解决方案:
将默认分支(母版)重命名为其他名称,例如上游
git checkout master
git branch -m upstream
从monorepo拆分子目录
git checkout upstream git subtree split -P <subdirectory path> -b master
现在我们有一个master分支,那里只有与子目录路径相关的提交。
((可选)
现在,如果上游monorepo添加了一些更改:
签出上游分支并进行更改
git checkout upstream
git pull
再次分裂
git subtree split -P <subdirectory path> -b upstream-patch
检查修订图,您将看到新分支(上游补丁)与master相关。
gitk master upstream-patch
现在只需将新分支合并为master
git checkout master git merge upstream-patch
手动解决任何合并冲突。
这不可能派生出一个单一存储库的一部分,因为git无法计算出良好的Sha1以便能够与上游同步。