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

4
阅读完this关于子模块的文章后,似乎它们仅存在于您自己的git存储库中链接到外部git存储库。然而,我希望子模块只是允许您在一个存储库中管理多个独立的提交历史记录。是否可能有非外部的git存储库?我想在一个存储库中管理所有的chef菜谱,并为每个菜谱分别创建独立的提交历史记录,而不需要创建一堆git存储库。
编辑:我认为我的用例并不清楚。我的意思是,我希望每个服务器的菜谱列表都在唯一可寻址的位置;而不是为单个菜谱创建子模块。在这种情况下,mu的答案相当有效地解决了问题。

2
为什么你不想使用单独的git存储库?这听起来像一个完全可以接受的解决方案,而且你没有解释任何问题,只是因为你不想使用它。 - Sven Marnach
在概念上,拥有一堆服务于基本相同目的的单独存储库似乎不太合理。而且在 GitHub 上这样做也很昂贵。mu 的答案为我很有效地解决了这个问题 :) - jtmarmon
我能理解“在Github上昂贵”的部分,但我不明白你的另一个观点。 - Sven Marnach
请看我的编辑 - 我觉得我在问题中解释得不好。对此感到抱歉 :) - jtmarmon
2个回答

6

是的,您可以使用孤立分支来实现。孤立分支将从新的父节点开始,因此它不会与任何其他分支有共同的提交。

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

所以,您只需要:

git checkout --orphan newbranch

git checkout手册页中得知:

--orphan <new_branch>

创建一个名为<new_branch>的孤立分支,以<start_point>为起点并切换到该分支。在这个新分支上的第一个提交将没有父级,它将是一个与所有其他分支和提交完全断开连接的新历史记录的根。

顺便说一下,您可以在存储库之间推送完全不相关的分支,您需要确保分支名称空间不冲突。
例如,如果您有两个现有的食谱存储库cookbook1cookbook2,则创建一个新的存储库cookbook,使用git remote add cookbook url/to/cookbook将此存储库cookbook作为现有存储库的远程添加,并且现在您可以使用cd cookbook1 && git push cookbook master:cookbook1cd cookbook2 && git push cookbook master:cookbook2将现有存储库历史记录推送到此存储库。
注意:正如其他人已经指出的那样,为每个食谱单独拥有一个存储库更有意义,因此仅在完全匹配您的用例时使用此方法。

工作目录在任何时候只包含一个菜谱。我认为这不是OP正在寻找的内容。 - Sven Marnach
@SvenMarnach 嗯,我认为这正是他所寻找的,他想使用单个存储库来管理它们,而不需要共享历史记录。他没有提到同时使用所有菜谱的任何事情。 - Anshul Goyal
啊,这似乎是一个好的解决方案。谢谢@mu無,我会在几分钟内接受它。 - jtmarmon
@JasonMarmon:通过这种设置,每个分支都将拥有自己完全独立的文件集。只有属于当前分支的文件才会在工作目录中可见。如果您切换到另一个分支,则工作目录的完整内容将被属于新分支的不相交文件集替换。这种设置在某些特殊用例中非常有用,但我无法看出它如何适用于您所描述的用例。 - Sven Marnach
对于我的特定情况,我正在opsworks上设置一些堆栈,并且我希望可以单独地访问烹饪书的列表(就像一个存储库),但出于上面列出的原因,在同一个存储库下。分支很好地解决了这个问题 - 我不知道为什么我最初没有考虑它 :p - jtmarmon

0

我强烈建议使用不同的代码库,然后使用Berkshelf将它们组合在一起。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接