2

我有很多子回购,这意味着一个拥有较小回购的大伞式回购。现在,当我在叶子仓库中进行提交时,这将自动意味着我在其父母中得到了改变。如果您将结构假设为二叉树,您可能会意识到这很荒谬——拥有 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 试用的动手 -example

请在此处复制此动手示例。您可以使用 3-level -sub-repos 测试那里的东西。

到目前为止建议

  1. Git 中的基本子模块,更多信息请点击此处

  2. 在这里的Gitslave 。

4

3 回答 3

1

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

如果你真的认为你需要存储库中的存储库,那么使用子模块。

于 2012-04-09T03:24:09.793 回答
0

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

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

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

现在,我一直在谈论子模块,但如果你想检查一下,看看你喜欢什么,还有一个叫做“子树”的替代方案。它位于主 git 存储库的 contrib/ 部分,因此默认情况下不安装。还存在子树策略(评论中链接到的 ProGit 章节)

于 2012-08-19T17:02:04.587 回答
0

您的设计或结构可能很差,这可能是 GoZoner 命令背后的前提"Don't create repositories within repositories.",但也有可能您的项目已经到了需要更强大工具的地步。有时基本的子模块还不够,而且你的仓库太宽泛,那么你可能应该看看——GitSlave!它是一个工作流工具,您可以在其中指定您的超级存储库,然后指定从存储库。您无需重复提交,而是在此处使用 gits -command --manual 。

相关主题

于 2012-08-19T16:45:59.070 回答