首页 > 解决方案 > 在上游的子目录上使用 git,同时保持合并功能的完整

问题描述

有没有办法从上游项目的子目录创建一个新的 repo(或分支,也可以正常工作),同时保持合并功能的完整性?

示例:上游使用 monorepo 设置,具有特定的子目录用于project/xyz. 我希望能够将该目录分离到一个单独的分支或存储库中,因此其内容project/xyz将位于新分支或存储库的根目录中。我会在这里进行修改。但我还希望能够定期将上游提交的更改合并回我的分支或存储库,同时保持历史记录完好无损。

理想情况下,我也可以将我的更改推送回原始项目,但我也可以为此使用补丁文件。

我看过git subtree,但据我了解,它的工作原理类似于子模块,其中项目的子目录指向不同的存储库。这不是我想要的(我必须修改上游项目,这是我做不到的,并为所有提交者提供对我的仓库的写访问权限)。

我也看过git filter-branch,但它创建了新的提交哈希,因此破坏了再次从上游合并的能力。

有没有人有这方面的工作流程?只用git可以吗?谁能描述一个可以使这项工作的脚本?

标签: git

解决方案


如果克隆项目的大小不是问题,您可能会摆脱所谓的“稀疏签出”:基本上,此功能允许您在本地克隆中拥有所有历史记录,但只签出选定的目录子集.

在这个 repo 中记录的提交仍然是“正常的”,因为它们将包括项目的完整状态。换句话说,你所谓的工作树——项目文件被检出的地方将保持对整个项目的有限视图。


推荐阅读