C#を使用している場合、この機能はLibGit2Sharp
0.22.0 NuGetパッケージ(プルリクエスト963)に追加されています。次のことができます。
var fileHistory = repository.Commits.QueryBy(filePathRelativeToRepository);
foreach (var version in fileHistory)
{
// Get further details by inspecting version.Commit
}
私のDiffAllFiles VS Extension(コードを表示できるオープンソース)では、特定のコミットでファイルにどのような変更が加えられたかを確認できるように、ファイルの以前のコミットを取得する必要がありました。これは、ファイルの以前のコミットを取得する方法です。
/// <summary>
/// Gets the previous commit of the file.
/// </summary>
/// <param name="repository">The repository.</param>
/// <param name="filePathRelativeToRepository">The file path relative to repository.</param>
/// <param name="commitSha">The commit sha to start the search for the previous version from. If null, the latest commit of the file will be returned.</param>
/// <returns></returns>
private static Commit GetPreviousCommitOfFile(Repository repository, string filePathRelativeToRepository, string commitSha = null)
{
bool versionMatchesGivenVersion = false;
var fileHistory = repository.Commits.QueryBy(filePathRelativeToRepository);
foreach (var version in fileHistory)
{
// If they want the latest commit or we have found the "previous" commit that they were after, return it.
if (string.IsNullOrWhiteSpace(commitSha) || versionMatchesGivenVersion)
return version.Commit;
// If this commit version matches the version specified, we want to return the next commit in the list, as it will be the previous commit.
if (version.Commit.Sha.Equals(commitSha))
versionMatchesGivenVersion = true;
}
return null;
}