如何在 Tfs 的团队项目中创建 Git 存储库?

How do I create a Git Repository within a TeamProject in Tfs?

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

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

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

有人对此有经验吗?

我认为您不能使用旧的 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 执行其余 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;
}