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

Git 链接版本控制存储库中的文件夹,git,svn,version-control,Git,Svn,Version Control,我在我的项目中有以下情况: 将有2个源代码存储库,但是每个源代码存储库都应该为部分代码(可能不止一个)提供“共享”区域 让我们假设存储库及其文件夹(以及这些文件夹中的文件)的以下结构 报告1 福尔德拉 folderB folderC 报告2 福尔德拉 折叠 福德尔 “folderA”应该包含完全相同的文件“副本”。因此,当我向Repo1/folderA提交一些更改,然后签出/更新Repo2/folderA时,我应该能够看到这些更改。当然,如果它能在相反的方向上工作,那就太好了 不幸的是,

我在我的项目中有以下情况:

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

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

报告1

  • 福尔德拉
  • folderB
  • folderC
报告2

  • 福尔德拉
  • 折叠
  • 福德尔
“folderA”应该包含完全相同的文件“副本”。因此,当我向Repo1/folderA提交一些更改,然后签出/更新Repo2/folderA时,我应该能够看到这些更改。当然,如果它能在相反的方向上工作,那就太好了

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


我正在寻找能够帮助我以最佳方式解决这个问题的风投(SVN、Git等)?您对这种设置有经验吗?您能推荐一些吗?

使用git,您可以创建第三个(共享)repo,其中只包含共享文件(folderA)。那么Repo1和Repo2都可以将共享回购包含为一个,因此:

缺点:

  • repo 1和2的子模块链接本身是版本化的,因此如果您希望它们看到repo 3头部的最新更改,则必须在两个repo中显式更新folderA
  • 如果您同时拥有repo1和repo2的工作副本,那么最终也会得到repo3的两个嵌套副本,并且它们不一定是同步的
好的一面是,如果有必要的话,你可以独立地对所有三个回购协议进行读写访问


它当然更容易使用

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

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

使用git,您可以创建第三个(共享)repo,其中只包含共享文件(folderA)。那么Repo1和Repo2都可以将共享回购包含为一个,因此:

缺点:

  • repo 1和2的子模块链接本身是版本化的,因此如果您希望它们看到repo 3头部的最新更改,则必须在两个repo中显式更新folderA
  • 如果您同时拥有repo1和repo2的工作副本,那么最终也会得到repo3的两个嵌套副本,并且它们不一定是同步的
好的一面是,如果有必要的话,你可以独立地对所有三个回购协议进行读写访问


它当然更容易使用

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

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

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

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

但是,您应该注意使用外部命令的情况


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

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

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

但是,您应该注意使用外部命令的情况


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

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