2012-04-09 71 views
2

我有很多sub-repos,这意味着一个大的伞回购,具有较小的回购。现在,当我在叶子回购中进行提交时,它将自动意味着我的父母发生了变化。如果你认为这个结构是一棵二叉树,你可能会意识到这是荒谬的 - 拥有5个git-repo深层结构很容易意味着$ git commit -m 'did 1'; cd ..; git commit -m 'did 1 as mentioned'; ... git commit -m 'did 1 same as earlier'。我怎样才能避免这种重复提交?Git:如何避免重复提交子子... Git -repos?

实施例1:关于该问题

X---------| 
      | 
Y---------A --------| 
        | 
      B --------|<-----Pictures (graphic designers, animators--have repo) 
        | 
      C --------| 

在画面的变化将改变A,B,C,X和Y的图形示例 - 臃肿提交,提交6由于一个变化,糟糕的重复!现在与图片合作的人可以完全不同于使用X,Y,A,B和C做事的人,使事情变得更加模糊。

例2:手工上-example与分次试验...... -repos

请复制此手在-example here。你可以用3级-sub-repos来测试那里的东西。

到目前为止建议

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

  2. Gitslave here

回答

1

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

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

+1

由于@GoZoner建议子模块是你想要的。你可以在这里阅读它们:http://progit.org/book/ch6-6.html – asm 2012-04-09 19:49:58

+0

'children directory WWW'相对于'Hello'在哪里? – GoZoner 2012-04-11 21:15:14

+1

GoZoner指出,我们不知道'WWW'是什么,但是一旦配置了子模块,您的文件结构应该与现在的相同。唯一的区别将是你如何承诺。现在我想到了,您仍然必须多次使用子模块进行提交,您只需提交子模块更改而不是实际文件。我不认为有一种方法可以在没有多次提交的情况下做你想做的事情。 – asm 2012-04-11 21:26:03

0

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

相关主题

0

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

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

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

现在,我一直在讨论子模块,但是如果你想查看一下你喜欢的东西,可以选择一种叫做“子树”的替代方案。它在主git仓库的contrib /部分,所以它默认情况下不会被安装。此外还存在子树策略(ProGit章节链接到评论中)

+1

@hhh如果部署存储库中的源代码无法更改,为什么需要存储库?另外,我还没有尝试过git-slave,但对我来说看起来并不怎么样。它似乎是减少重复而不是管理子库本身的解决方案。哦,'git subtree'和'git merge -s subtree'是分开的实体。 – alternative 2012-08-19 17:11:30

+1

@hhh Git是为了跟踪源代码而不是部署的东西(这是我真的不喜欢Heroku的原因......)。这听起来像你使用git作为部署工具,当你不应该。例如,如果您想避免为开发人员提供图形资源,您可以重新部署tarball或其他东西。通常,git仓库包含构建项目所需的*最小* *(如果使用autoconf,* no *生成的文件,* no * ./configure),正是因为它总是在提交时更新这些生成的文件是有问题的,再生回购。 – alternative 2012-08-19 17:22:26

+0

你可以在你的答案中区分''git subtree“'和''git merge -s subtree”吗? Git-subtree是Git的一些外部模块,而''-s subtree''中只有一个占位符,名称为“subtree”?此外,我希望你检讨这个线程[here](http://stackoverflow.com/questions/10790634/changing-permissions-with-deep-git-repository-repository-tree-with-sub-repos-an),因为我我暗示有gitslave,但git-subtree可能是更好的选择,不知道,只是在那里的新颖的建议。 – hhh 2012-08-19 17:31:29