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

2024-04-09

Sometimes I find monorepo https://github.com/babel/babel/blob/master/doc/design/monorepo.md on GitHub that consists of multiple npm packages, which I would like to make some modification and use it in my projects. But it's much harder for npm to install package from a git subdirectory than to install from a git repository[1 /a/39195334/5532169][2 https://github.com/npm/npm/issues/2974]. Since I would make my own modification, I wonder how can I set up my own git repository so that it is easy for npm to install, and for me to merge upstream changes.

目前,我使用本指南 https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/从 GitHub 将包与 monorepo 的其余部分分开,即

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

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

以前有人这样做过吗?任何想法?


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


所以这是我的解决方案:

  1. 克隆单一存储库
  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 推送
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何分叉 monorepo 的一部分并且仍然能够合并上游提交? 的相关文章

  • 无法使用 File delete() 方法删除 git repo 中的 .pack 文件

    对于我正在编写的这个方法 我使用 jgit 库克隆一个 git 存储库 然后对这些文件执行一些操作 最后我想删除该存储库 我遇到的问题是 当我在 pack 文件 位于 git objects pack 中 上调用 delete 方法时 它无
  • 如何在保留历史记录的同时将 git 存储库重新设置为父文件夹?

    我有一个 git 仓库 foo bar baz具有大量的提交历史和多个分支 我现在想要 foo qux位于同一个仓库中 foo bar baz 这意味着我需要它们都位于植根于的存储库中 foo 但是 我想保留我所做的更改的历史记录 foo
  • 如何使用 BFG 删除受保护的提交

    使用 BFG 清理存储库时 https rtyley github io bfg repo cleaner https rtyley github io bfg repo cleaner 遇到以下情况 Protected commits T
  • 如何忽略Git中以数字开头的文件?

    在某个文件夹中 我有名为foo jpg bar png等等 我想将它们保留在版本控制中 除了那些命名为1 baz png 2 zaz jpg等 因为它们实际上是生成的 我应该添加什么条目 gitignore 正则表达式如 0 9 似乎不起作
  • 从 Jenkinsfile 中获取有关其他分支的信息

    Jenkins Blue Ocean 与链接的 Bitbucket Server 实例在同一本地网络上运行 Jenkins 中的多分支项目能够为本地 Bitbucket 服务器上链接的 Bitbucket 存储库的每个分支创建一个分支 但在
  • 如何从“git log”中查看 Git 中的特定版本?

    My git log显示为 enter code here git trial git log commit 4c5bc66ae50780cf8dcaf032da98422aea6e2cf7 Author king lt email pro
  • 列出其他人(即不是我)所做的提交?

    是否有一种标准方法可以列出 git 存储库中其他人 即不是我自己 所做的所有提交 I tried git log not author username 但看起来 not仅适用于修订版 的联机帮助页git log似乎没有提供反转谓词的方法
  • Git - 包含来自其他存储库的文件

    对于 Git 我想包含一些常见的 JS CSS 库和 或实用方法 即来自另一个存储库的特定文件 在我的项目中 我希望它们始终是最新的 我真的不想要整个远程存储库 如果我可以处理远程文件的 本地副本 并将更改推送回来 那就太好了 一个有点类似
  • 如何更改 Bitbucket 中的 git 提交消息?

    我需要更改 Bitbucket 中的旧 git 提交消息 我试过git rebase i并重写了我的消息 但是当我拉取并提交时 它只是将旧消息保留在 Bitbucket 中并合并了我的更改 这基本上是 4 个步骤的过程 但如果多个团队成员在
  • Git 版本控制中忽略父目录

    如何忽略父目录 gitignore 我尝试了这种模式 但似乎它们不起作用 如果您想忽略某个文件夹但不想修改现有的 gitignore 请将 gitignore 放入仅包含星号的文件夹中 下面是一个快速的 BASH 示例 用于完成 idea
  • 从 git 签出后 nuget dll 丢失

    I have a C solution containing different projects On those projects I have some normal nuget packages like Newtonsoft Js
  • 将更改恢复到特定提交

    我为自己创建了一个新分支 现在我需要一次将多个提交从主分支恢复到特定提交 我知道有一个安全的命令可以使用git revert no commit COMMIT TO REVERT FROM COMMIT TO REVERT TO 这给了我e
  • 有没有一种方法可以非交互地压缩大量提交?

    我正在尝试压缩一系列提交 HEAD 到 HEAD 3 有没有一种快速的方法可以做到这一点 或者我需要使用 rebase interactive 确保你的工作树是干净的 然后 git reset soft HEAD 3 git commit
  • Sourcetree 2.1.2.5 - 显示“未提交的更改”,但没有任何待处理的内容

    我有一个以前没有遇到过的问题 即使我没有什么可提交的 并尝试将我的分支重置为 Sourcetree 显示的最新提交Uncommitted changes 根据 Atlassian 论坛的说法 通常有两个原因 您的工作目录中有很多很多未暂存的
  • Git:man 命令不起作用

    在 Git Bash 中 他们给了我一个error用于返回 man command man git bash man command not found 我的 Git 版本 git version git version 2 18 0 wi
  • 如何列出 Git 1.7+ 中的所有远程分支?

    我试过了git branch r 但这仅列出我在本地跟踪的远程分支 如何找到我没有的列表 命令是否列出对我来说并不重要all远程分支或仅那些未跟踪的分支 For the vast majority 1 of visitors here th
  • git:如何查明某个分支是否有拉取请求?

    我在 git 分支上 有没有办法查看该分支是否有拉取请求 在这种特殊情况下 Atlassian Stash 用于管理拉取请求 当然我可以使用Stash的Web界面来搜索拉取请求 但我也可以仅使用 git 命令行工具从脚本执行此操作吗 Cor
  • 判断 Git 提交是否是合并/恢复提交

    我正在编写一个脚本 需要检查特定提交是否是合并 恢复提交 我想知道是否有 git 技巧 到目前为止我想到的 我绝对不想依赖这里的提交消息 是检查HASH 2看看我是否没有收到错误 是否有更好的方法 判断某个东西是否是合并很容易 这是不止一位
  • 如何预览 Git 中的隐藏内容?

    我想检查一个存储 并找出如果我将其应用于当前状态的工作树 它会发生什么变化 我知道我可以对存储进行 git diff 但这向我展示了工作树和存储之间的所有差异 而我只是想知道存储应用将改变什么 git stash show将向您显示最近存储
  • 在 git 子模块中签出分支

    如何从子模块内更改分支 当我跑步时git branch从子模块内 我看到以下输出 gt git branch HEAD detached from 229a7b2 master 我如何将自己置于一个新的分支上 喜欢development 只

随机推荐

  • 如何在 1 维和 n 维空间中有效地选择模拟退火的邻居

    我想使用模拟退火在某个预定义的区间内找到单变量多项式函数的局部最小值 我还想尝试找到二次函数的全局最小值 像这样的无导数算法并不是解决该问题的最佳方法 因此这仅用于研究目的 虽然算法本身非常简单 但我不确定如何在单维或 n 维空间中有效地选
  • 在 Objective-C 中发布 JSON

    我今天有一个相当简单的问题 我有一个应用程序需要以 2D GPS 坐标的形式将简单的 JSON 数组发送到远程服务器 该应用程序将使用 CoreLocation 框架来生成这些坐标 现在 我想对一些示例坐标进行硬编码以获得正确的 JSON
  • 无法使用 CSS 重置更改正文背景颜色

    这是我的 HTML 代码
  • 当我的主数据库不可用时,Azure 如何通知我?

    我已为我的主 Sql Azure 数据库设置了主动异地复制 如何通知我由于数据中心问题我的主数据库不可用 以便我可以开始应用程序故障转移过程 另外 流量管理器如何通知故障转移事件 在大多数大规模中断中 您的应用程序连接都会受到影响 因此它可
  • Delphi7,创建组合框项

    我想使用组合框为用户提供多种选项 所以有2个组合框 第一个大约有 5 个选项 第二个项目将根据用户在第一个组合框中选择的内容创建 到目前为止 我已经尝试过 Combobox2 Items Strings 1 xxxx 这让我出现这个错误 L
  • 如果复制列表初始化允许显式构造函数,可能会出现什么问题?

    在 C 标准 13 3 1 7 over match list 中 有以下规定 在复制列表初始化中 如果explicit选择了构造函数 初始化格式错误 这就是为什么我们不能做这样的事情的原因 struct foo explicit beca
  • 如何在 UIImageView 之上添加交互式 UILabels?

    我需要在上面添加一些标签UIImageView 可以通过点击标签来更改标签的文本 实现这一目标的最佳方法是什么 我正在使用 Swift 编程语言 在 stackoverflow 上查找一些解决方案 我发现了一些使用的演练String dra
  • 从哪里可以获得最新的 ANSI C 标准文档 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在哪里可以找到最新的 ANSI C
  • Nginx 自定义 PHP error_pages 具有不同的标头状态代码和正文内容

    使用 Nginx 0 8 54 我设置 PHP 错误页面来对某些链接进行重定向 对其他链接进行 404 重定向并显示自定义 HTML 正文 nginx server error page 404 err error php error 40
  • Mercurial Hook - 更改提交前的提交消息

    Edit制作这个基本钩子是为了防止分支名称和提交消息 bugID 不匹配 https gist github com 2583189 https gist github com 2583189 所以基本上的想法是 如果分支名称类似于 bug
  • SQL Server 2016 SSMS Json 格式

    我正在 SQL Server 2016 的 SSMS 中使用 JSON 有没有办法解决 FOR JSON 语句的结果显示为 XML 列的问题 是否有任何设置更改 附加组件 外部工具等 甚至黑客可以减轻这种痛苦 在我的理想世界中 单击 JSO
  • 如何确定 HBase 表的大小?有什么命令可以这样做吗?

    我的 Hbase shell 上有多个表 我想将它们复制到我的文件系统上 有些表超过 100GB 但是 我的本地文件系统中只剩下 55GB 可用空间 因此 我想知道 hbase 表的大小 以便我可以仅导出小尺寸的表 任何建议表示赞赏 谢谢
  • css 星级 html

    我正在关注此页面上的教程 http www henryhoffman com css star rating tutorial html http www henryhoffman com css star rating tutorial
  • GWT序列化问题

    我在返回一个通过 RPC 实现 IsSerialized 的对象的 ArrayList 时遇到了很大的麻烦 IsSerialized pojo 包含一个变量 一个字符串 并具有一个 0 参数构造函数 我已经从我的战争中删除了 gwt rpc
  • NSAttributedString initWithData:options:documentAttributes:error: 非常慢

    我使用这些代码行从简单的 HTML 字符串创建属性字符串 NSDictionary importParams NSDocumentTypeDocumentAttribute NSHTMLTextDocumentType NSCharacte
  • 名为 isActive 的布尔变量的 setter

    我的 pojo 类中有一个名为 isActive 的属性 当我使用 Eclipse IDE 生成此属性的访问器时 它会生成以下 getter 和 setter Getter isActive Setter setActive 但是 当我尝试
  • 选择当前单词的多个实例并更改它们的 vim 方法是什么?

    任何熟悉 Sublime Text 的多光标功能的人都会认识到执行以下操作的模式 多次按热键以选择光标下单词的多个实例 并自动为每个实例创建一个新光标 然后同时编辑每个实例 例如通过用另一个单词或任何您想要的单词替换当前单词 vim 可以通
  • 使 div 不自动拉伸到容器宽度

    我的问题很简单 您能否阻止 div 自动拉伸到其包含元素的宽度 并使其仅水平拉伸到其内部内容所强制的程度 有点像 div 的默认垂直行为 但水平应用 这可能吗 你必须设置display财产给inline block div style di
  • 通过复制另一个 pdf 中的数据来创建新 pdf

    我有一个 pdf 文件 其中包含一些内容 它实际上是一个模板 我已设法从 pdf 中读取内容并根据要求进行更改并将其保存在字符串变量中 现在我必须创建一个新的 pdf 文件 该文件将进行更改 并且初始模板文件不会更改 为了提高透明度 我附上
  • 如何分叉 monorepo 的一部分并且仍然能够合并上游提交?

    Sometimes I find monorepo https github com babel babel blob master doc design monorepo md on GitHub that consists of mul