无法从 libgit2sharp 中的提交中获取添加的文件名
Unable to get added file names from the commit in libgit2sharp
我想出了以下代码来识别最近一次提交和上一次提交之间更改的文件。此逻辑显示已更改文件的名称。但是它不记录 "Added" 文件的名称。我正在使用 GitLab 回购来测试这个。请指教如何解决这个问题。
static void Main(string[] args)
{
using (var repo = new Repository(@"C:\xxxx\source\repos\SampleApp"))
{
//Get the brach
var branch = repo.Branches.Where(b => !b.IsRemote && b.IsCurrentRepositoryHead).FirstOrDefault();
//Get the latest commit
var latestCommit = branch.Commits.ElementAt(0);
Console.WriteLine(string.Format("Latest Commit: {0}-{1}", latestCommit.MessageShort, latestCommit.Committer.When));
//Get the previous comit
var previousCommit = branch.Commits.ElementAt(1);
Console.WriteLine(string.Format("Previous Commit: {0}-{1}", previousCommit.MessageShort, previousCommit.Committer.When));
//Get the change set
var changeSet = repo.Diff.Compare<TreeChanges>(latestCommit.Tree, previousCommit.Tree);
var modifiedFiles = changeSet.Modified;
var addedFiles = changeSet.Added;
//Print names of modified files
foreach (var m in modifiedFiles)
{
Console.WriteLine("Modified: " + m.Path);
}
//Print names of added files
foreach (var m in addedFiles)
{
Console.WriteLine("Added: " + m.Path);
}
Console.Read();
}
}
}
提前致谢。
更新:
问题在于获取更改集的下一行。我以其他方式使用旧树和新树参数。我换了那些,现在可以正常使用了。
//Get the change set
var changeSet = repo.Diff.Compare<TreeChanges>(previousCommit.Tree, latestCommit.Tree);
下面是功能齐全的代码。
static void Main(string[] args)
{
using (var repo = new Repository(@"C:\xxxx\source\repos\SampleApp"))
{
//Get the brach
var branch = repo.Branches.Where(b => !b.IsRemote && b.IsCurrentRepositoryHead).FirstOrDefault();
//Get the latest commit
var latestCommit = branch.Commits.ElementAt(0);
Console.WriteLine(string.Format("Latest Commit: {0}-{1}", latestCommit.MessageShort, latestCommit.Committer.When));
//Get the previous comit
var previousCommit = branch.Commits.ElementAt(1);
Console.WriteLine(string.Format("Previous Commit: {0}-{1}", previousCommit.MessageShort, previousCommit.Committer.When));
//Get the change set
var changeSet = repo.Diff.Compare<TreeChanges>(previousCommit.Tree, latestCommit.Tree);
var modifiedFiles = changeSet.Modified;
var addedFiles = changeSet.Added;
//Print names of modified files
foreach (var m in modifiedFiles)
{
Console.WriteLine("Modified: " + m.Path);
}
//Print names of added files
foreach (var m in addedFiles)
{
Console.WriteLine("Added: " + m.Path);
}
Console.Read();
}
}
我想出了以下代码来识别最近一次提交和上一次提交之间更改的文件。此逻辑显示已更改文件的名称。但是它不记录 "Added" 文件的名称。我正在使用 GitLab 回购来测试这个。请指教如何解决这个问题。
static void Main(string[] args)
{
using (var repo = new Repository(@"C:\xxxx\source\repos\SampleApp"))
{
//Get the brach
var branch = repo.Branches.Where(b => !b.IsRemote && b.IsCurrentRepositoryHead).FirstOrDefault();
//Get the latest commit
var latestCommit = branch.Commits.ElementAt(0);
Console.WriteLine(string.Format("Latest Commit: {0}-{1}", latestCommit.MessageShort, latestCommit.Committer.When));
//Get the previous comit
var previousCommit = branch.Commits.ElementAt(1);
Console.WriteLine(string.Format("Previous Commit: {0}-{1}", previousCommit.MessageShort, previousCommit.Committer.When));
//Get the change set
var changeSet = repo.Diff.Compare<TreeChanges>(latestCommit.Tree, previousCommit.Tree);
var modifiedFiles = changeSet.Modified;
var addedFiles = changeSet.Added;
//Print names of modified files
foreach (var m in modifiedFiles)
{
Console.WriteLine("Modified: " + m.Path);
}
//Print names of added files
foreach (var m in addedFiles)
{
Console.WriteLine("Added: " + m.Path);
}
Console.Read();
}
}
}
提前致谢。
更新: 问题在于获取更改集的下一行。我以其他方式使用旧树和新树参数。我换了那些,现在可以正常使用了。
//Get the change set
var changeSet = repo.Diff.Compare<TreeChanges>(previousCommit.Tree, latestCommit.Tree);
下面是功能齐全的代码。
static void Main(string[] args)
{
using (var repo = new Repository(@"C:\xxxx\source\repos\SampleApp"))
{
//Get the brach
var branch = repo.Branches.Where(b => !b.IsRemote && b.IsCurrentRepositoryHead).FirstOrDefault();
//Get the latest commit
var latestCommit = branch.Commits.ElementAt(0);
Console.WriteLine(string.Format("Latest Commit: {0}-{1}", latestCommit.MessageShort, latestCommit.Committer.When));
//Get the previous comit
var previousCommit = branch.Commits.ElementAt(1);
Console.WriteLine(string.Format("Previous Commit: {0}-{1}", previousCommit.MessageShort, previousCommit.Committer.When));
//Get the change set
var changeSet = repo.Diff.Compare<TreeChanges>(previousCommit.Tree, latestCommit.Tree);
var modifiedFiles = changeSet.Modified;
var addedFiles = changeSet.Added;
//Print names of modified files
foreach (var m in modifiedFiles)
{
Console.WriteLine("Modified: " + m.Path);
}
//Print names of added files
foreach (var m in addedFiles)
{
Console.WriteLine("Added: " + m.Path);
}
Console.Read();
}
}