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

时间:2012-08-08 12:36:55

标签: git svn version-control

我的项目中有以下情况:

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

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

Repo1

  • folderA
  • FolderB中
  • folderC

Repo2

  • folderA
  • folderD
  • folderE

“folderA”应包含完全相同的“副本”文件。因此,当我对Repo1 / folderA进行一些更改,然后检查/更新Repo2 / folderA时,我应该能够看到这些更改。当然,如果它可以在相反的方向上起作用,那将是很好的。

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

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

2 个答案:

答案 0 :(得分:3)

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

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

但是,您应该了解issues的外部因素。

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

答案 1 :(得分:1)

使用git,您可以创建仅包含共享文件(folderA)的第三个(共享)repo。然后Repo1和Repo2都可以将共享仓库包含为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
              ...

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