如何在Tfs的TeamProject中创建Git存储库?

时间:2019-05-03 15:40:53

标签: c# git tfs tfvc tfs-sdk

我正在尝试将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)。

有人对此有经验吗?

1 个答案:

答案 0 :(得分: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并创建存储库:

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;
}