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

jtm*_*mon 4 git github git-submodules chef-infra

在阅读了关于子模块的这篇文章后,它们似乎只是为了从您自己的内部链接到外部 git 存储库而存在。但是,我希望子模块能够让您从一个存储库中管理多个单独的提交历史记录。

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

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

mu *_*u 無 6

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

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

所以你需要做的就是:

git checkout --orphan newbranch
Run Code Online (Sandbox Code Playgroud)

git checkout手册页

--orphan <new_branch>

创建一个新的孤立分支,命名为<new_branch>,从<start_point>它开始并切换到它。在这个新分支上进行的第一次提交将没有父级,它将成为与所有其他分支和提交完全断开的新历史的根。

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

因此,举例来说,如果你有2个现有的食谱资料库,cookbook1cookbook2创建一个新的存储库cookbook,添加此库cookbook使用在现有的仓库远程git remote add cookbook url/to/cookbook,现在你可以使用推送现有回购历史上这个回购cd cookbook1 && git push cookbook master:cookbook1cd cookbook2 && git push cookbook master:cookbook2

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