链接版本控制存储库中的文件夹



我的项目中有以下情况:

将有 2 个源代码存储库,但是每个存储库都应该为代码的某些部分(可能不止一个)提供"共享"区域。

让我们假设存储库及其文件夹(以及这些文件夹中的文件)的结构如下。

回购1

  • 文件夹A
  • 文件夹B
  • 文件夹C

回购2

  • 文件夹A
  • 文件夹D
  • 文件夹E
"

文件夹A"应包含完全相同的文件"副本"。因此,当我向 Repo1/folderA 提交一些更改,然后签出/更新 Repo2/folderA 时,我应该能够看到这些更改。当然,如果它可以在相反的方向上工作,那就太好了。

不幸的是,我无法以另一种方式构建源代码并创建某种共享库。

正在寻找可以帮助我以最佳方式解决此问题的 VCS(SVN、Git 等)?您对这种设置有任何经验吗,您能推荐一些东西吗?

如果您使用的是 Subversion,那么您可以使用外部,这将允许您在存储库中拥有一个包含共享代码的文件夹,并且两个项目文件夹中的每个中继都将将其 externals 属性设置为指向此共享存储库位置。

这是双向的,因此您可以对共享文件夹进行更改,当您更新任一项目文件夹时,将选取这些更改,或者您可以从本地项目文件夹进行更改,这些更改将提交到共享存储库文件夹。

但是,您应该了解外部的问题。

另一种选择可能是将共享代码的源代码完全分离到第三方库中,然后使用 NuGet 将该库轻松部署到各种项目。例如,TeamCity 可以在提交共享库代码时为你生成 NuGet 包(并充当 NuGet 包服务器)。

使用 git,您可以创建仅包含共享文件(文件夹 A)的第三个(共享)存储库。然后 Repo1 和 Repo2 都可以包含共享存储库作为子模块,因此:

Repo1/folderA ->
     /folderB    
     /folderC     
                   -> Repo3/folderA
                  /
Repo2/folderA ->-
     /folderD
     /folderE

缺点:

    存储库
  • 1 和 2 的子模块链接本身是版本控制的,因此如果您希望它们在存储库 3 的 Head 上看到最新更改,则必须显式更新两个存储库中的文件夹 A。
  • 如果你有两个存储库 1 和 2 的工作副本,你最终也会得到两个 repo3 的嵌套副本,它们不一定是同步的。

好处是,如果重要的话,你可以独立地授予对所有三个存储库的读写访问权限。


它当然更容易使用

Repo/shared/folderA
    /project1/folderB
              ...
    /project2/folderD
              ...

如果可能的话(构建系统也可能更容易工作)。不过,您确实失去了独立许可两个项目的能力。

最新更新