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

标签 git version-control mercurial dvcs

目前我们正在使用 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

等等

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

基本用例:

  1. 工程师收到项目描述(通常有人已经在该项目上工作过)
  2. 工程师的硬盘上有整个 SVN 存储库副本。他转到必要的国家/客户并为客户文件夹(如果他没有项目)或项目文件夹(如果他之前已经 checkout )执行 SVN 更新
  3. 用户在项目上工作并通过提交整个项目文件夹来提交。

有些人只是浏览 TortoiseSVN Repo 浏览器,找到必要的项目并检查它。

所以现在我们需要一些同样简单但使用 Git/Hg 的东西。据我所知,在 Git 中非常常见的模式 - 1 Repo/1 Project。所以问题是:

  1. 有什么方法可以在 Git/Hg 中对 repos 进行分类吗?
  2. 有没有办法通过 GUI (Win) 浏览存储库并提取必要的一个?
  3. 关于如何使用 Git/Hg 组织我们的 repo,您​​有什么建议吗?

我创建了 BitBucket Git 存储库来使用它,但现在还不知道如何组织我们的项目。

请注意 - 分支对我们来说不是很常见的情况,因为项目在开发方面非常小。

最佳答案

As I understand in Git the very common pattern - 1 Repo/1 Project.

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

因此,为每个项目 创建一个存储库。您可以通过创建像现在这样的文件夹结构来将项目组织成组。文件夹结构不会出现在任何存储库中——它只是对相关存储库进行分组的一种方式。

诸如 Kallithea 之类的工具还可以让您在分层组中组织存储库。这将使您的用户可以方便地浏览存储库。

所以,问题是:

  1. Is there any way to categorize repos in Git/Hg?
  2. Is there way to browse repos throug GUI (Win) and pull necessary one?
  3. Do you have any offer how to organize our repo using Git/Hg?

总结以上答案:是的,您可以组织存储库。您可以通过将它们放入目录结构来在文件系统级别执行此操作,也可以通过使用合适的存储库管理器在 HTTP 级别执行此操作。

如何浏览存储库以找到合适的存储库取决于组织。共享存储库的推荐方式是 HTTP,然后“打开存储库”对话框将不允许您在文件夹中四处浏览——因为文件夹仅存在于由 Kallithea 提供的 URL 中。因此,您的工程师通常会在浏览器中浏览存储库结构,然后将正确的 URL 复制粘贴到 TortoiseHg 中。

当他们从服务器克隆时,工程师应该将本地克隆放入与服务器上的克隆相匹配的层次结构中。此层次结构将通过其本地磁盘上的目录来完成。然后,他们当然可以像往常一样使用 Windows 资源管理器浏览此层次结构。

关于具有复杂项目结构的 Git/Hg 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8936600/

相关文章:

linux - 在 EC2 实例中克隆 Laravel 项目,我应该如何清理权限和 git?

mercurial - 如何获取当前的 Mercurial 变更集修订版而不是哈希值

html - 如何更改我的 Mercurial Web 界面方面

version-control - 如何在 P4V(Windows)中分配标签?

proxy - hg 克隆无法访问网络

xcode - Gitlab - Xcode 无法连接远程存储库

windows - Jenkins Windows 从站 : Authentication failed if running as service

Git 推送错误 并非所有引用都已推送

ruby-on-rails - 版本化 Rails 应用程序的最佳方式?

google-apps-script - 列出并复制 Google 表格文件的特定命名版本