如何从c#应用程序中检索git提交Id

本文关键字:检索 git 提交 Id 应用程序 | 更新日期: 2023-09-27 18:17:14

我正在寻找一个CI构建自动化任务,我想使用Git提交Id来命名我的构建。我打算写一个c#程序来做这件事。我可以使用哪些库从c#调用Git存储库?我可以调用本地存储库克隆并使用git.exe(Windows)或libgit2sharp检索此信息,但我不知道如何在远程源

如何从c#应用程序中检索git提交Id

上做到这一点

从CI的角度来看,您可能愿意构建一个特定的分支。

下面的代码段演示了这一点。

using (Repository repo = Repository.Clone(url, localPath))
{
    // Retrieve the branch to build
    var branchToBuild = repo.Branches["vNext"];
    // Updates the content of the working directory with the content of the branch
    branchToBuild.Checkout();
    // Perform your build magic here ;-)
    Build();
    // Retrieve the commit sha of the branch that has just been built
    string sha = branchToBuild.Tip.Sha;
    // Package your build artifacts using the sha to name the package
    Package(sha);
}

注意: url可以指向:

  • 一个远程http url (http://www.example.com/repo.git)
  • CI服务器上的位置(file:///C:/My%20Documents/repo.git)
  • 网络位置(file://server/repos/repo.git)

我已经使用LibGit2Sharp很长一段时间了,它很好。

下面是一个示例,它将遍历url中的commits

注意:我不得不做一个clone,不确定是否有更好的方法:

string url = "http://github.com/libgit2/TestGitRepository";
using (Repository repo = Repository.Clone(url, @"C:'Users'Documents'test"))
{
    foreach (var commit in repo.Commits)
    {
        var commitId = commit.Id;
        var commitRawId = commitId.RawId;
        var commitSha = commitId.Sha; //0ab936416fa3bec6f1bf3d25001d18a00ee694b8
        var commitAuthorName = commit.Author.Name;
        commits.Add(commit);
    }
}