【问题标题】:How do I create a Git Repository within a TeamProject in Tfs?如何在 Tfs 的团队项目中创建 Git 存储库?
【发布时间】:2019-09-22 04:43:27
【问题描述】:

我正在尝试将 TfsServer 从旧的基于 TFVC 的服务器 (2013) 移动到较新的版本 (2018)。我已经弄清楚了大部分内容,但我无法以编程方式创建大量存储库。

我一直在尝试使用 Microsoft.TeamFoundation.ExtendedClient 根据名称列表在特定 TeamProject 中创建存储库。我已经设法查询了所有已经存在的存储库:

public void CreateTeamProjectRepositories(IEnumerable<string> input)
{
      using (var newCollection = new TfsTeamProjectCollection(new Uri(_newUrl)))
      {
           var service = newCollection.GetService<GitRepositoryService>();
      }
}

遗憾的是,这方面的文档相当薄,实际上我能找到的唯一官方文档是这样的:

https://docs.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/dn231953(v%3Dvs.120)

我什至无法在扩展客户端中找到该类,我能找到的唯一类是我在上面使用的GitRepositoryService,但似乎没有该类的任何文档。

我在网上找到了一些描述如何创建 TeamProjects 的非官方资料,但在 TeamProject 中的 Repos 上没有任何内容(远程 URL,例如 www.url.com:8080/tfs/TeamProjectCollection/TeamProject/_git/RepoName)。

有人有这方面的经验吗?

【问题讨论】:

  • 您是尝试在 2013 实例还是 2018 实例上创建存储库?
  • 我正在 2018 年的实例中尝试它。我们有一个巨大的工作空间,里面有大量的项目,我想在其中加入一些结构。我正在使用 git-tfs 将 TFVC 分支转换为本地 Git 存储库,但是手动创建它们的数量太多了,我希望有一些方法可以以编程方式进行。

标签: c# git tfs tfvc tfs-sdk


【解决方案1】:

我认为您无法使用旧的 TFS 类创建 Git 存储库,但您可以使用新的 TFS .Net libraries(在 NuGet 中可用)来创建:

VssConnection connection = new VssConnection(new Uri("http://tfs-server:8080/tfs/{collection}"), new VssCredentials());
GitHttpClient gitClient = connection.GetClient<GitHttpClient>();
GitRepository newRepo = new GitRepository() { Name = "newRepo" };
await gitClient.CreateRepositoryAsync(newRepo, "teamProjectName");

以上代码在 TFS 2018 上工作,如果你想在 TFS 2013 中创建存储库,我不确定代码是否可以工作,所以你可以使用 HttpClient 执行 Rest API 并创建 repo:

var tfsUrl = "http://tfstest01:8080/tfs/{collection}";
var tfsUri = new Uri(tfsInstance + "/{teamProjectGUID}/_apis/git/repositories/?api-version=1.0");
using (HttpClient client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true }))
{
     var data = new { name = "newRepo" };
     var json = JsonConvert.SerializeObject(data);
     var content = new StringContent(json, Encoding.UTF8, "application/json");
     HttpResponseMessage response = null;
     response = client.PostAsync(tfsUri, content).Result;
}

【讨论】:

  • @Vaethin 我还用HttpClient 示例更新了答案:)
猜你喜欢
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2016-12-08
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2016-01-29
相关资源
最近更新 更多