假设我在 git repo 中有 Project1。在 Project1 中有一个我想包含在 Project1+ 中的子文件夹(Project2、Project3 等)。“包含”并不是指复制和粘贴。我想要一个对 Project1 的引用,以便如果我对 Project1 进行更改,我可以自动将这些更改集成到 Projects1+ 中。此外,我想将它放置在 Project1+中的多个位置。
例子:
Project1
|-Subfolder1
|-Stuff I want...
|-README.md
Project2
|-Subfolder1 <- from Project1
|-SomeOtherFolder
|-Subfolder1 <- from Project1
|-README.md
Git 子模块不起作用,因为:
- 子模块是整个仓库,而不是子文件夹。我不想要整个仓库,只想要一个文件夹。
子树合并策略不起作用,因为:
- 只支持一个子树;当您对子树进行拉取(git pull -s subtree...)时,它只会更新最高级别的那个(无论它们的创建顺序如何)。
现在请记住,我是 git 新手,所以上述结论可能是错误的。但这是我通过研究和实验发现的。
我想出的可能的解决方案是:
- 为 Project1 创建一个分支。
- 从此分支中删除我不想要的所有内容。
- 将我想要的文件移动到此分支的根目录。
- 删除子文件夹。
- 将此分支作为子模块添加到 Project1+。
这有点奏效。我修改了 Project1 主分支并能够将更改合并到新分支中,因此更新了子模块,但这似乎不必要地复杂(考虑到它在 SVN 中的简单程度)。此外,当我合并 Project1 中的更改时,它似乎认为删除的文件有冲突;即更新Project1 只是一个巨大的PITA。也许我需要不同的合并策略?
但主要是我问这甚至是正确的道路吗?
作为记录,这对于 SVN Externals 来说非常简单。所以用例就在那里。我意识到完全有可能没有人用 git 来做这件事。经过几天的研究,我可以在网上找到的解释都归结为“重组你的项目,让每个 repo 都有你想要分享的东西”;即 Project1 中的“子文件夹”成为它自己的存储库。我希望这不是最终的答案。
谢谢!