有时我在GitHub上发现monoreo由多个npm包组成,我想对其进行一些修改,并在我的项目中使用它。但是,对于npm来说,从git子目录安装包要比从git存储库安装要困难得多[1][2]。由于我会自己进行修改,我想知道如何建立自己的git存储库,以便npm可以轻松安装,并可以合并上游的更改。
目前,我使用GitHub的这个指南将包从monoreto的其他部分(即(中分离出来
git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME BRANCH-NAME
Npm可以很容易地安装repo,但我发现很难合并任何上游更改。
以前有人这样做过吗?知道吗?
实际上,我想我错过了一些东西-合并上游更改并不像我想象的那么难,因为git子树拆分是确定性的,即无论该过程重复多少次,它都会为同一子树拆分生成相同的SHA1。
所以这是我的解决方案:
- 克隆monoreto
-
将默认分支(主分支(重命名为其他分支,例如上游
git checkout master git branch -m upstream
-
从monorepo 中拆分子目录
git checkout upstream git subtree split -P <subdirectory path> -b master
现在我们有一个主分支,它只包含与子目录路径相关的提交。
-
(可选(设置master分支的远程并将其推送到GitHub。
如果上游单回购增加了一些变化:
-
检查上游分支并提取更改
git checkout upstream git pull
-
再次拆分
git subtree split -P <subdirectory path> -b upstream-patch
检查修订图,您会看到新的分支(上游补丁(与master相关。
gitk master upstream-patch
-
现在只需合并新分支即可掌握
git checkout master git merge upstream-patch
手动解决任何合并冲突。
- (可选(数字推送
这是不可能分叉单存储库的一部分的,因为git将无法计算出能够与上游同步的好Sha1。
但也许"稀疏结账"正是你想要的。这样您就可以在工作目录中选择所需的子目录。
请参见示例https://gist.github.com/sumardi/5559896和http://schacon.github.io/git/git-read-tree.html#_sparse_checkout