【问题标题】:Linking folders in version control repository链接版本控制存储库中的文件夹
【发布时间】:2012-08-08 12:36:54
【问题描述】:

我的项目中有以下情况:

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

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

回购1

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

回购2

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

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

很遗憾,我无法以其他方式构建源代码并创建某种共享库。

我正在寻找可以帮助我以最佳方式解决此问题的 VCS(SVN、Git、...)?你有这种设置的经验吗?你能推荐一些吗?

【问题讨论】:

  • 是否需要有 2 个存储库,或者可以是同一个存储库的两个文件夹?
  • 是的,它可以是一个包含两个文件夹的存储库。
  • 您可以将folderA或Repo2添加为SVN外部,指向Repo1的文件夹A,反之亦然

标签: git svn version-control


【解决方案1】:

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

这是两种方式,因此您可以对共享文件夹进行更改,当您更新任一项目文件夹时它们将被拾取,或者您可以从本地项目文件夹进行更改,它们将被提交到共享存储库文件夹.

但是,您应该注意 issues 与外部。

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

【讨论】:

    【解决方案2】:

    使用 git,您可以创建第三个(共享)存储库,其中仅包含共享文件(文件夹 A)。那么 Repo1 和 Repo2 都可以将共享 repo 包含为submodule,所以:

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

    缺点:

    • repo 1 和 2 的子模块链接本身是版本化的,因此如果您希望它们看到 repo 3 的 HEAD 上的最新更改,您必须明确更新两个 repos 中的 folderA。
    • 如果您同时拥有 repo 1 和 2 的工作副本,那么您最终也会得到 repo3 的两个嵌套副本,它们不一定是同步的

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


    它当然更容易使用

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

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

    【讨论】:

      猜你喜欢
      • 2016-06-13
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-06
      相关资源
      最近更新 更多