【问题标题】:Does git have any built in repository management strategy?git 是否有任何内置的存储库管理策略?
【发布时间】:2014-02-24 12:58:30
【问题描述】:

我目前正在尝试提出一种版本控制策略,用于将我们公司的代码和文档文件从集中式 SCM (Perforce) 迁移到 Git。 Perforce 中的内容只是一个存储所有项目的大型 Depot,出于多种原因,我想将其分解为多个较小的 Git 存储库。

我现在遇到的问题是如何索引所有这些存储库,以便可以轻松找到它们。据我所知,Git 没有任何用于管理多个存储库的内置工具。

我确实找到了git-submodule,但听起来那是为了创建一个包含其他存储库内容的存储库,我不想管理各种存储库的内容,而是管理存储库本身.

最初我想在我们的服务器上安装一个平面文件系统:

/repos
   -repo1.git
   -repo2.git
   -...
   -repoN.git

然后只需一个 git 命令来查询此目录中的所有存储库名称和有关内容的注释(有点像登录服务器,转到 /repos 目录并运行 git log)。我在想我可以让/repo 本身成为git 存储库(存储库的存储库),然后完全按照我刚才所说的去做,但这似乎是...... un-git-y。

所以我的问题是:

  1. 我是否缺少任何用于管理多个存储库的内置 git 工具/功能?
  2. 我认为git-submodule 不是我正在寻找帮助管理此问题的想法是否正确?
  3. 对于此类设置,您有什么好的策略吗?

【问题讨论】:

  • 最接近的可能是子模块。您可以拥有一个(可能是空的)根存储库,它引用所有其他存储库,这些存储库仍然是独立的,可以单独克隆和处理。另一种选择是用于 Android 的 Google 的 Repo 工具(但与它无关),但我更喜欢子模块。
  • Perforce 有一个工具可以让您将所有代码保存在 Perforce 存储库中,但使用 git 作为客户端。这样您的开发人员就可以使用 git,但您的管理员可以方便地管理单个存储库。
  • 这是一个在小表中的简单查找,这里只需要一个平面文件。 curl u://r/l | grep ^projecta.

标签: git version-control filesystems perforce multiple-repositories


【解决方案1】:

如果您想要一个纯 Git 解决方案,那么您正在寻找 git-submodule

尤其是当你说:

我在想我可以让 /repo 本身成为一个 Git 存储库(存储库的存储库)

这正是子模块的含义。

父 repo 将跟踪单个文件 - .gitmodules,它将路径与其他 repo 的修订版连接起来。


但是,根据我的经验,我得出的结论是 Git 子模块并不理想,尤其是当您与没有经验的 Git 用户打交道时。切换分支或更改子模块时可能会导致问题。一些 GUI Git 客户端不完全支持子模块。

但如果您只想跟踪这些文件夹,则可以使用子模块。


另一种方法是忽略主存储库中的此类文件夹,并在这些文件夹中拥有单独的 Git 存储库。 Git 在这些文件夹中完美运行,无论它们位于另一个 Git 存储库下。

此解决方案非常适用于应用程序项目中的供应商库。你可以使用包/依赖管理器来更新它们,或者只是 cdgit pull

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 2021-02-26
    • 2014-04-22
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    相关资源
    最近更新 更多