きよくらの備忘録

「三日坊主と呼ばせない!日記」改め。主にソフトウェア開発関連の話題。

Azure DevOps のgitリポジトリにPersonal Access Tokensを使ってLibGit2Sharpでアクセスする

Azure DevOpsのgitリポジトリに LibGit2Sharp を使ったコードでアクセスする際、私は今まで Azure DevOpsで Alternate Credentials として設定した ID/パスワードを利用していました。 しかしながら、Alternate Credentials がついに来月、2020年3月2日をもって完全に無効になるという事で、Personal Access Tokens(PAT)に切り替えることにしました。

参考: devblogs.microsoft.com

方法:UsernamePasswordCredentials でPasswordとしてTokenを設定するだけ

"切り替える"といっても、特に難しいことはありませんでした。 CredentialsProvider として UsernamePasswordCredentialsを利用し Alternate Credentials のID/Password を用いて認証していたコードからは以下2点が異なるだけです。

  • Username : 任意の文字列を設定(NULLや空文字列はNG)
  • Password : 生成したPATを設定

コード例:

// ローカルのリポジトリを開いて認証が必要なリモートoriginをfetchするサンプル
private void FetchSample()
{
  var RepositoryLocalPath = @"C:\Some\Rep\Path";
  using (var repo = new Repository(RepositoryLocalPath))
  {
    var remote = repo.Network.Remotes["origin"];
    var refSpecs = remote.FetchRefSpecs.Select(x => x.Specification);
    var fetchOption = new FetchOptions()
    {
      CredentialsProvider = (_url, _user, _cred) => new UsernamePasswordCredentials
      {
        Username = "anystring", // 任意の文字列。NULLや空文字列はNG。
        Password = "hogefugahagamogehogefugahagamogehogefugahagamoge" // Azure DevOpsで生成したPAT
      }
    };
    var logMessage = "";
    Commands.Fetch(repo, remote.Name, refSpecs, fetchOption, logMessage);
  }
}