使用单个 git 存储库而不是子模块来管理不同的代码库

Manage different codebases using single git repository instead of submodules

阅读关于子模块的 this 文章后,似乎它们只存在于 link 到您自己内部的外部 git 存储库。但是,我希望子模块仅允许您从一个存储库中管理多个独立的提交历史记录。

是否可以拥有非外部 git 存储库?我想在一个存储库下管理我所有的厨师食谱,每个存储库都有单独的提交历史,而不需要创建一堆 git 存储库

编辑:我认为我没有把我的用例说清楚。我的意思是我想在唯一可寻址的地方为我的每台服务器提供 列表 食谱;并不是说我想要一个单独的食谱的子模块。在这种情况下,mu 的回答非常有效地解决了这个问题。

是的,您可以使用 orphan 分支。 orphan 分支将从新的父分支重新开始,因此它不会与任何其他分支有任何共同的提交。

这样,您可以拥有多个分支,每个分支对应于您各自食谱的不同提交历史记录。

所以你需要做的就是:

git checkout --orphan newbranch

来自git checkout man page

--orphan <new_branch>

Create a new orphan branch, named <new_branch>, started from <start_point> and switch to it. The first commit made on this new branch will have no parents and it will be the root of a new history totally disconnected from all the other branches and commits.

FWIW,您可以在存储库之间推送完全不相关的分支,您需要确保分支名称 space 不会冲突。

因此,例如,如果您有 2 个现有的食谱存储库,cookbook1cookbook2,请创建一个新存储库 cookbook,将此存储库 cookbook 添加为使用 git remote add cookbook url/to/cookbook 远程访问现有存储库,现在您可以使用 cd cookbook1 && git push cookbook master:cookbook1cd cookbook2 && git push cookbook master:cookbook2

将现有存储库历史推送到此存储库

注意:正如其他人已经指出的那样,为每本食谱单独存储更有意义,因此只有在它完全符合您的用例时才使用这种方法。

我强烈建议为此使用单独的存储库,然后使用 Berkshelf 将它们 assemble 在一起。