Git:如何避免重复提交sub-sub-sub ... Git -repos?

时间:2012-04-09 01:48:13

标签: git commit repeat

我有很多子回购,意思是一个有较小回购的大伞回购。现在,当我在一个叶子回购中提交时,它将自动意味着我的父母得到了改变。如果你把结构假设为二叉树,你可能会觉得它很荒谬 - 有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在那里进行测试。

  

到目前为止建议

  
      
  1. Git中的基本子模块,更多here

  2.   
  3. Gitslave here

  4.   

3 个答案:

答案 0 :(得分:1)

不要在存储库中创建存储库。这样可以避免重复提交。可能也会解决其他问题。

如果您确实认为您需要存储库中的存储库,那么请使用子模块。

答案 1 :(得分:0)

您的设计或结构可能很差,也许是GoZoner命令"Don't create repositories within repositories."背后的前提,但您的项目也可能需要更强大的工具。有些时候基本的子模块还不够,你的回购太宽,那么你应该看看--GitSlave!这是一个工作流程 - 工具,您可以在其中指定超级回购,然后指定从属回购。您可以使用gits -command - manual here

,而不是重复提交

相关主题

  

答案 2 :(得分:0)

您的存储库中的文件是否经常与其他存储库中的其他文件相关联?如果是这样,多个存储库您的朋友。只有在完全(或几乎完全)彼此独立时才应使用多个存储库。

另一方面,如果它们完全独立,那么您可以使用单独的存储库。然后,要构建某种可能使用来自每个存储库的文件的主项目(即,它取决于其他存储库),那么您使用子模块。

作为另一个存储库的子模块的存储库意味着它依赖于该子模块。如果API不稳定,子模块之间的依赖关系可能是一个坏主意,但如果API稳定,那么一个中的更改不会直接影响另一个(即,不需要更改代码),那么两个顶级子模块可以相互依赖。

现在,我一直在谈论子模块,但是如果你想检查出你想要的东西,那么另一种存在称为“子树”。它位于主git存储库的contrib /部分中,因此默认情况下不会安装它。还存在子树策略(在评论中链接的ProGit章节)