Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有复杂项目结构的Git/Hg存储库_Git_Version Control_Mercurial_Dvcs - Fatal编程技术网

具有复杂项目结构的Git/Hg存储库

具有复杂项目结构的Git/Hg存储库,git,version-control,mercurial,dvcs,Git,Version Control,Mercurial,Dvcs,目前我们正在使用SVN(是的,我知道这很丢脸:),我们正在检查是否有可能移动Git或Hg。 目前,我们有一个svn回购协议,其结构如下: Platform 1- . Country 1 . Customer A . Project Z . Project Y . Custom

目前我们正在使用SVN(是的,我知道这很丢脸:),我们正在检查是否有可能移动Git或Hg。 目前,我们有一个svn回购协议,其结构如下:

Platform 1-
          . Country 1
                    . Customer A
                               . Project Z
                               . Project Y
                    . Customer B
                               . Project X
          . Country 2
                    . Customer C
                               . Project W
Platform 2 
          . Country 1
等等

我们只有两个顶级“平台”,但国家、客户、尤其是项目的数量相当高(我确信项目数量>100)。 这种结构对我们来说非常方便,因为很容易找到必要的项目(因为开发人员知道平台、国家和客户)。通常开发人员可以在一周内切换项目几次,这个组织是非常重要的

基本用例:

  • 工程师收到项目描述(通常有人已经参与了项目)
  • 工程师的硬盘上有完整的SVN回购副本。他前往必要的国家/地区/客户,对客户文件夹(如果他没有项目)或项目文件夹(如果他以前已经签出)进行SVN更新
  • 用户处理项目,并通过提交整个项目文件夹进行提交
  • 有些人只需浏览OrtoiseSVN Repo浏览器,找到必要的项目并进行检查

    所以现在我们需要同样简单的东西,但是使用Git/Hg。正如我在Git中所理解的,非常常见的模式是1回购/1项目。因此,问题是:

  • 有没有办法用吉特/汞柱对回购进行分类
  • 有没有办法通过GUI(Win)浏览回购协议并提取必要的回购协议
  • 您是否提供如何使用Git/Hg组织我们的回购协议
  • 我创建BitBucket Git repo就是为了玩它,但现在还不知道如何组织我们的项目


    只需注意一点-分支对于我们来说并不常见,因为项目在开发方面非常小。

    最简单的选择是,您只需为项目使用一个git存储库,就像使用subversion一样

    优点:和你的一样。缺点:要更新任何部分,请更新存储库的所有部分;没有像SVN那样的“仅在此处”更新

    通常,如果平台、国家/地区和项目完全独立,我建议您的工程师在本地创建该结构,并将存储库命名为
    ${platform}-${country}-${project}
    ,以保留该细节

    如果愿意,您显然可以编写签出过程的脚本来构建该结构,如果愿意,您可以使用类似的工具或其他设计用于从单个位置处理多个存储库的工具


    另一方面,如果您的项目非常相似,您可能会查看分支,或者是一个
    git-rebase
    驱动的工作流,这可能会使您更容易将常见的更改合并到您的系统中。

    是的,每个项目都有一个repo是非常常见的,并且强烈建议您(在git/Hg中,repo比在SVN中更轻量级). 这样,只需要签出(克隆)一个项目的人就可以这样做。否则,每个人都必须克隆整个项目集。然而,想要一切的人,将不得不一个接一个地克隆。因此,如果您不考虑分支,您可以在一个repo中拥有所有项目(因为如果您将所有项目放在一起,则分支不可能在项目级别,因此,如果您进行分支,则每个项目repo都是必要的。)

    根据文件夹对回购进行分类,以便URL显示分类,如
    git@host.com/platform1/Country1/CustomerA/project1.git
    等。请注意,如果您在一次回购中拥有这些项目,您将无法获得此类URL。您将只有
    git@host.com/reto.git
    或类似的东西

    查看折衷方案,决定是一次回购还是多次回购。您甚至可能希望按平台等分组,而不是按项目分组


    您可以使用GitWeb或cgit等web界面浏览回购协议。

    您希望每个项目有一个回购协议。这降低了您在处理项目时需要保留在本地的数据量:与SVN不同,您拥有每个回购副本中每次更改的完整历史记录。在执行
    git log
    s时,它还可以防止一个项目上的提交与另一个项目上的提交混杂在一起

    然后,添加顶级回购以处理顶级结构。在该repo中,为每个叶repo添加git子模块。人们总是开始克隆/拉取顶层结构,然后只使用
    git子模块更新
    git拉取
    检查他们需要的项目

    顶层项目将跟踪子模块的头散列,您可以使用或不使用子模块,具体取决于您的偏好

    正如我在Git中所理解的,非常常见的模式是1回购/1项目

    它不仅非常常见,而且在使用Mercurial或Git等分布式版本控制系统时,它实际上是强制性的。原因是这两个系统都不支持克隆,也就是说,只下载属于较大存储库中某个子目录的历史记录的克隆。因此,您需要签出所有内容,以获得存储库的一小部分

    因此,为每个项目创建一个存储库。您可以通过创建像今天这样的文件夹结构将项目组织到组中。文件夹结构不在任何存储库中-它只是一种将相关存储库分组的方法

    诸如之类的工具还可以让您以分层组的形式组织存储库。这将允许用户以方便的方式浏览存储库

    因此,问题是:

  • 有没有办法用吉特/汞柱对回购进行分类
  • 有没有办法通过GUI(Win)浏览回购协议并提取必要的回购协议
  • 您是否提供如何使用Git/Hg组织我们的回购协议
  • 总结以上答案:是的,您可以组织存储库。您可以在文件系统级别通过将它们放入目录结构来实现,也可以在HTTP级别通过使用合适的r