如何处理多个不相关项目中的共享文件(dll)

时间:2018-05-03 20:20:50

标签: git repository azure-devops

我目前的任务是将我们的存储库从SVN移植到GIT中。 在我这样做的同时,我打算尝试打破一些我们大部分无关的领域。我们会说我们在ExternalCustomerCommunications中有一些项目使用ABC.cs的项目,我们有InternalUser UI代码也使用了一些文件和项目dll。当然,如果我将所有代码保留在当前的一个仓库中,那么他们可以在解决方案中共享ABC dll,因为它们都在同一个存储库中。由于我们的存储库的大小以及两个完全不同的服务器和应用程序中的两个部分,我认为打破一些部分可能是有意义的。

我的问题是,为了做到这一点,如何处理两个存储库都想要相同的共享代码?我知道一个子树可能是一个解决方案,但我不确定这是否可取。我读过关于子树和子模块的恐怖的帖子。

我认为这是一种相当普遍的情况,但我不知道有任何处理它的最佳做法。

我也相信我读到单个解决方案要么不能也不应该有两个存储库。

如果重要的话,我正在使用VSTS及其托管的GIT实例以及visual studio(如果它适合该过程,可能还有sourcetree)

2 个答案:

答案 0 :(得分:1)

假设SubRepo是管理引用项目(ABC.cs)的git仓库,MainRepo是要从外部仓库(SubRepo)添加引用的git仓库。以下是分别通过子模块和子树实现的方法:

选项1:子模块

要将SubRepo添加为MainRepo的子模块,您可以使用以下命令:

# In the directory of the local MainRepo directory, such as C:\MainRepo
git submodule add <URL for SubRepo>
git commit -m 'add SubRepo as a submodule for the MainRepo'
git push

现在SubRepo的所有文件都添加到子目录C:\MainRepo\SubRepo中,然后您可以引用子目录下的文件,提交,推送和更改。

注意:如果SubRepo中的文件已更新,您可以使用以下命令相应地更新MainRepo中的子模块:

git submodule update --remote
git commit -am 'update submodule'
git push

选项2:子树

要将SubRepo添加为MainRepo的子树,您可以将SubRepo分支的文件添加到Mainrepo的子目录中。用于添加子树的命令如下:

git subtree add --prefix=subfolder <URL for SubRepo> master
git push

现在git将SubRepo的master分支的文件添加到subfolder的子文件夹MainRepo中,合并并将更改提交到MainRepo

注意:如果文件在SubRepo中更新,您可以使用以下命令更新MainRepo的子树:

git subtree pull --prefix=sub <URL for SubRepo> master
git push

答案 1 :(得分:0)

您的GIT存储库应尽可能轻量级,构建,测试,部署和依赖关系管理应由一些配置文件处理。配置文件格式通常由使用的框架或自动化工具确定。例如,在JavaScript中,您将使用npm包管理器列出您的依赖项并将它们保留在存储库之外。如果要在两个存储库之间共享代码,则使用新的npm package创建第三个存储库,然后在其他存储库中,您可以使用package.jsonnpm配置文件)来指定共享代码存储库从依赖项安装期间提取代码。

如果你还需要为共享仓库构建,测试和部署周期,你应该将你的工件发布到一个特殊的存储库,这是为了这个目的而构建的(我听说过关于artifactory的好东西)

我看到你提到ABC.cs所以我推断出C#语言。您可以为此目的调查NuGet包管理器。

还有一些解决方案,比如GIT LFS,用于保存大文件,但我从来不需要使用它。