在VSTS中为多个项目设置多个GIT仓库

10

我对VSTS和Git不太熟悉,可能会忽略某些明显的问题或者无法理解VSTS的工作方式。

我们的团队将使用集中式工作流。在VSTS中是否有设置一个地方来存放所有存储库的位置?

如果我有50个以上的仓库,并且其中一些仓库被用于许多项目。例如,提供通用数据给多个不同的应用程序(网站、内部支持应用程序、移动应用等)的 Web 服务项目。

如果在vsts中创建了一个项目,该Web服务和移动应用程序需要更改,似乎唯一的选择是将git存储库直接导入到该项目中。项目结束时,存储库会去哪里? 是否有一种方法在VSTS中设置集中存放所有存储库的位置?如果有,那么在新项目中使用该存储库(和其他存储库)的工作流程是什么?

更新

我知道git是分布式的,但是我们仍然需要一个代表最新版本的存储库。在git书中,这称为“中央”或“受保护的”存储库。

由于VSTS为每个项目创建了单独的存储库。我想知道如何从VSTS管理这个工作流程,还是这是一个手动过程?

我认为这是一种常见的设置。一个有50到100个代码仓库的大型企业公司。许多项目可以涉及到许多仓库。我想尽可能地从VSTS中管理。

3个回答

5

软件项目与团队项目

要构建和部署软件应用程序,您首先需要定义一个软件项目。软件项目与团队项目不同。

团队项目定义了一个流程和数据存储,您可以从规划到部署管理您的软件项目。当您连接到VSTS或本地TFS时,您会连接到一个帐户或团队项目集合。在该集合中,可以定义一个或多个团队项目。至少必须创建一个团队项目才能使用该系统。

参考 https://learn.microsoft.com/en-us/vsts/user-guide/concepts?view=vsts

创建团队项目后,您可以在团队项目中拥有多个git存储库。

创建git存储库的方法如下:

enter image description here

创建多个仓库后,您可以从中访问它们。

enter image description here

你可以将多少个软件项目放入特定的存储库由你决定。 你可以为API创建一个存储库,为APP创建另一个存储库。 或者只创建一个存储库来容纳这两者。

我有多个代码库,但是因为我想要一个中央“祝福的代码库”,一旦项目结束,我需要将代码移动到该代码库。是否有一种方法可以从VSTS管理这个过程? - Allan
这就是OP所询问的内容(或者应该是,我猜我必须这么说)。主要的障碍是如何将多个存储库添加到一个项目中,然后为每个存储库提供单独的看板,并向某个团队授予对该存储库/看板组合的特定访问权限。目前,文档说它是“这样的”,等等。但是找到启用这些基本操作的Web控件的具体步骤既不明显也没有在微软的光辉承诺中得到记录。 - Stato Machino

0

对于Git来说,它是一种分布式版本控制系统(DVCS),而不是集中式版本控制系统(CVCS)。 DVCS比CVCS有更多的优势。更多详情,您还可以参考git书籍中的About Version Control

对于你的情况,主要问题似乎是如何在多个项目之间共享git仓库(这意味着一个git仓库可能被位于不同项目中的其他git仓库使用)。

处理这种情况的常见方法是使用git模块git子树。 假设项目1中的git仓库webrepo还需要在项目2的repo2和项目3的repo3中使用。那么您可以使用以下任何选项将webrepo添加到repo2repo3中。

选项1:使用git子模块

  • webrepo作为子模块分别添加到repo2repo3中:

      git submodule add <webrepo的URL>
    
  • webrepo更新时,获取repo2repo3的子模块更新:

      git submodule update --remote
    
  • 要从子模块推送更改到webrepo,您可以进入子模块的路径,然后进行提交和推送。

你还可以参考git书中的子模块

选项2:使用git subtree

  • 将一个分支的文件从webrepo添加到repo2和repo3,请使用以下命令:

      git subtree add --prefix=webrepo <URL for webrepo>
    
  • 从wenrepo获取更改并应用到子树中:

      git subtree pull --prefix=webrepo <URL for webrepo>
    
  • 将更改从子树推送到webrepo:

      git subtree push --prefix=webrepo <URL for webrepo>
    
您还可以参考文档Git subtree:Git子模块的替代方案

即使Git是分布式的,我仍然希望有一个中央化的工作流程。 “其他”存储库是由VSTS创建的 - 我不需要整个存储库。如果我可以指向存储库,然后为该特定项目(在VSTS中)分支,那将更有意义。然后,在项目完成后将更改推送/拉回主分支。 - Allan
所以假设您正在处理repo2,您想从/向webrepo拉取/推送更改吗? - Marina Liu
是的 - 如果我有一个名为“网站升级”的项目,vsts会创建一个名为“网站升级”的存储库。现在我必须将我的存储库导入该项目 - 这使得该存储库成为“最新”的存储库。但我想要的是祝福的存储库能够存在于该项目之外。在vsts中管理这个的工作流程是什么?还是由git本身来管理? - Allan
无法使用git子模块或子树帮助您解决这种情况吗?此外,对于多个git仓库,如果它们都为同一项目做出贡献,则可以在同一个VSTS项目下管理多个仓库。 - Marina Liu
嗯...我相信OP的问题是关于VSTS/AzureDevops如何工作,而不是关于GIT如何工作。这是合适的,因为以前的VSTS界面很难理解,只有当用户具有服务器TFS背景时才有意义。当用户或管理员试图了解如何安排代表可交付组件的GIT存储库时,新的Azure Devops界面甚至更加深奥。 - Stato Machino

0

我们经过深思熟虑,认为虽然子模块/子树在技术上可以让您拥有传统的 Visual Studio 解决方案,加载多个项目(因此:可以跨项目边界进行 F10 或 F11 步进的源代码),但我们不认为我们的团队会成为足够精通“Git”的高手来管理这一点。

我们大多数人已经决定学习如何单独处理项目,并使用构建管道将它们“Nuget-ize”。然后,通过 NuGet 将“项目引用”带入其他项目。Azure DevOps / NuGet 支持的一个概念是符号服务器 / NuGet 符号包,可以与您的 NuGet 同时发布,据说可以缓解调试挑战的问题。我对此还太新了,无法发表任何更进一步的意见。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接