1

我的项目中有以下情况:

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

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

回购1

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

回购2

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

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

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

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

4

2 回答 2

3

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

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

但是,您应该注意外部问题

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

于 2012-08-08T12:57:45.463 回答
1

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

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

缺点:

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

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


它当然更容易使用

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

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

于 2012-08-08T12:45:07.930 回答