我有很多子回购,意思是一个有较小回购的大伞回购。现在,当我在一个叶子回购中提交时,它将自动意味着我的父母得到了改变。如果你把结构假设为二叉树,你可能会觉得它很荒谬 - 有5个git-repo深层结构很容易就意味着$ git commit -m 'did 1'; cd ..; git commit -m 'did 1 as mentioned'; ... git commit -m 'did 1 same as earlier'
。我怎样才能避免这种重复的提交?
示例1:关于问题的图形示例
X---------| | Y---------A --------| | B --------|<-----Pictures (graphic designers, animators--have repo) | C --------|
图片中的更改将更改A,B,C,X和Y - 膨胀提交,6次提交由于一次更改,重复性错误!现在,使用图片的人可能与使用X,Y,A,B和C的人做完全不同的人,使事情变得更加模糊。
示例2:手动进行试验,使用sub-sub ... -repos
请复制此手动示例here。您可以使用3级-sub-repos在那里进行测试。
到目前为止建议
答案 0 :(得分:1)
不要在存储库中创建存储库。这样可以避免重复提交。可能也会解决其他问题。
如果您确实认为您需要存储库中的存储库,那么请使用子模块。
答案 1 :(得分:0)
您的设计或结构可能很差,也许是GoZoner命令"Don't create repositories within repositories."
背后的前提,但您的项目也可能需要更强大的工具。有些时候基本的子模块还不够,你的回购太宽,那么你应该看看--GitSlave!这是一个工作流程 - 工具,您可以在其中指定超级回购,然后指定从属回购。您可以使用gits -command - manual here。
相关主题
不确定是否应该使用Gitslave?阅读一篇小介绍here并附带演练。
答案 2 :(得分:0)
您的存储库中的文件是否经常与其他存储库中的其他文件相关联?如果是这样,多个存储库不您的朋友。只有在完全(或几乎完全)彼此独立时才应使用多个存储库。
另一方面,如果它们完全独立,那么您可以使用单独的存储库。然后,要构建某种可能使用来自每个存储库的文件的主项目(即,它取决于其他存储库),那么您使用子模块。
作为另一个存储库的子模块的存储库意味着它依赖于该子模块。如果API不稳定,子模块之间的依赖关系可能是一个坏主意,但如果API稳定,那么一个中的更改不会直接影响另一个(即,不需要更改代码),那么两个顶级子模块可以相互依赖。
现在,我一直在谈论子模块,但是如果你想检查出你想要的东西,那么另一种存在称为“子树”。它位于主git存储库的contrib /部分中,因此默认情况下不会安装它。还存在子树策略(在评论中链接的ProGit章节)