如何自动创建类似于 TFS 的 Git repo 和 checkout 文件
Posted
技术标签:
【中文标题】如何自动创建类似于 TFS 的 Git repo 和 checkout 文件【英文标题】:How to automatically create Git repo and checkout files similar to TFS 【发布时间】:2021-04-20 17:49:28 【问题描述】:我有一个自动化工具,可以在 TFS 中创建工作区,检查解决方案并根据其他输入根据需要对其进行修改。我使用 TfsTeamProjectCollection 以及 Microsoft.TeamFoundation.VersionControl.Client 类来完成大部分工作。这是我的代码所做的示例。
public void CreateWorkspace()
this.teamProjectCollection = new TfsTeamProjectCollection(new Uri(AzureDeployHelperDefinitionData.TFS_URL));
this.versionControlServer = teamProjectCollection.GetService<VersionControlServer>();
this.BaseSourcePath = string.Format(@"blah", "blah", this.Branch);
this.Workspace = this.versionControlServer.QueryWorkspaces( this.WorkspaceName, this.versionControlServer.AuthorizedUser,null ).FirstOrDefault() ??
this.versionControlServer.CreateWorkspace( this.WorkspaceName, this.versionControlServer.AuthorizedUser, this.WorkspaceComment );
var items = this.versionControlServer.GetItems( this.BaseSourcePath, this.version, RecursionType.OneLevel );
if( items == null || !items.Items.Any() )
throw new NullReferenceException( "Unable to get workspace items." );
我们现在已将所有源代码移至 Git。有没有人有在 Git 中做类似事情的经验?是否有 Git 特定的库可以用来做类似的事情。如果是这样,请您指出正确的方向吗?
我的目标是使用我创建的另一个工具(基于 c#)自动检查解决方案,并根据需要将文件添加到该解决方案中。类似于我上面在 TFS 中所做的,我现在想在 Git 中做。
【问题讨论】:
你做了哪些研究?你试过什么? 需要考虑的是,在处理 Git 命令时,shell 脚本通常更容易编写、测试和维护。您仍然可以像以前一样从脚本中调用您的程序来执行更改的“胆量”。从长远来看,这可能会为您节省大量时间和精力。 我对 Git 有点陌生,所以我仍在理解这一切,但我尝试了下面的 VssConnection connection = new VssConnection(new Uri("tfs-server:8080/tfscollection "), 新的 VssCredentials()); GitHttpClient gitClient = connection.GetClientAzure DevOps 中的 Git 是标准 Git。您可以使用 Git 命令从 DevOps 克隆 repo、添加文件并推送提交:
https://git-scm.com/docs/git
或者将 REST API 与 Azure DevOps 服务一起使用。 Git客户端示例,可以参考以下链接:
https://github.com/microsoft/azure-devops-dotnet-samples/tree/main/ClientLibrary/Samples/Git
using Microsoft.TeamFoundation.Core.WebApi;
using Microsoft.TeamFoundation.SourceControl.WebApi;
using Microsoft.VisualStudio.Services.WebApi;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Microsoft.Azure.DevOps.ClientSamples.Git
[ClientSample(GitWebApiConstants.AreaName, "items")]
public class ItemsSample : ClientSample
[ClientSampleMethod]
public IEnumerable<GitItem> ListItems()
VssConnection connection = this.Context.Connection;
GitHttpClient gitClient = connection.GetClient<GitHttpClient>();
TeamProjectReference project = ClientSampleHelpers.FindAnyProject(this.Context);
GitRepository repo = GitSampleHelpers.FindAnyRepository(this.Context, project.Id);
List<GitItem> items = gitClient.GetItemsAsync(repo.Id, scopePath: "/", recursionLevel: VersionControlRecursionType.OneLevel).Result;
Console.WriteLine("project 0, repo 1", project.Name, repo.Name);
foreach(GitItem item in items)
Console.WriteLine("0 1 2", item.GitObjectType, item.ObjectId, item.Path);
return items;
[ClientSampleMethod]
public GitItem GetItem()
VssConnection connection = this.Context.Connection;
GitHttpClient gitClient = connection.GetClient<GitHttpClient>();
TeamProjectReference project = ClientSampleHelpers.FindAnyProject(this.Context);
GitRepository repo = GitSampleHelpers.FindAnyRepository(this.Context, project.Id);
// get a filename we know exists
string filename = gitClient.GetItemsAsync(repo.Id, scopePath: "/", recursionLevel: VersionControlRecursionType.OneLevel).Result
.Where(o => o.GitObjectType == GitObjectType.Blob).FirstOrDefault().Path;
// retrieve the contents of the file
GitItem item = gitClient.GetItemAsync(repo.Id, filename, includeContent: true).Result;
Console.WriteLine("File 0 at commit 1 is of length 2", filename, item.CommitId, item.Content.Length);
return item;
【讨论】:
感谢您提供以上链接。 我正在寻找一种自动执行此操作的方法,类似于我在上面使用 TFS 所做的操作。我的目标是使用我创建的另一个工具(基于 c#)自动检查解决方案,并根据需要将文件添加到该解决方案 查看我在回复中提供的 Git 客户端示例链接。以上是关于如何自动创建类似于 TFS 的 Git repo 和 checkout 文件的主要内容,如果未能解决你的问题,请参考以下文章
使用Visual Studio 2017克隆TFS Git repo时出错400