如何使用libgit2sharp更改/删除/添加文件? [英] How to get files changed/removed/added using libgit2sharp?

查看:135
本文介绍了如何使用libgit2sharp更改/删除/添加文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个约会-从和到.我必须找到该日期差之间在存储库中更改的文件,并列出它.这是一个有关树木之间差异的相关问题.从LibGit2Sharp中的提交中获取修改/添加/删除的文件.

I have two dates - from and to. I have to find the files changed in the repository between that date difference and make a list of it. Here is a related question which gets the differece between trees.Get files modified/added/removed from a commit in LibGit2Sharp.

推荐答案

因此,假设您正在尝试复制:

So lets assume you are trying to replicate:

git log --reverse --since "11/10/2015" --until="11/15/2015" --format="%cD %s"

一旦有了提交列表,即 ICommitLog ,通过所有存储库的 Commits ,已过滤的分支列表等,您就可以通过Linq进行过滤.

Once you have a list of commits, ICommitLog, via all the repo's Commits, a filtered branch list, etc.. you can filter via Linq.

因此,创建您的提交列表:

So create your commit list:

var repo = new Repository ("/Users/sushi/code/playscript/mono");
var filter = new CommitFilter {
    SortBy = CommitSortStrategies.Time | CommitSortStrategies.Reverse,
};
var commits = repo.Commits.QueryBy(filter);

现在使用 ICommitLog commits 对象,在提交对象上应用 Linq 过滤器.在这种情况下,我使用提交者的日期并过滤从今天起2到7天的提交,但是请记住还有一个 Author 日期:

Now with the ICommitLog commits object, apply a Linq filter on the commit objects. In this case I am using the committer's date and filtering the commits from 2 to 7 days from today, but remember there is also an Author date:

var since = new DateTimeOffset(DateTime.Now.AddDays(-7));
var until = new DateTimeOffset(DateTime.Now.AddDays(-2));
var filteredCommitLog = commitLog.Where(c => c.Committer.When > since && c.Committer.When < until);
foreach (Commit commit in filteredCommitLog)
{
    Console.WriteLine("{0} : {1}", commit.Committer.When.ToLocalTime(), commit.MessageShort);
}

结果:

11/15/2015 5:32:36 AM -08:00 : [runtime] Fix Thread.CurrentThread in non-root appdomains by setting the tls slot in start_wrapper, otherwise Thread.CurrentThread would create a new Thread object so there would be two. Fixes #35828.
11/15/2015 12:00:30 AM -08:00 : Fix a warning.
....
11/10/2015 6:41:09 AM -08:00 : Merge pull request #2214 from kumpera/fix_enum_get_get_hashcode
11/10/2015 6:07:50 AM -08:00 : [Mono.Posix] Update incorrect test

更新:

我完全错过了这个答案的一部分,修改后的文件列表...:-/(需要更多咖啡)

git log --name-status --reverse --since "11/10/2015" --until="11/15/2015" --format="%cD %s"

成为:

    var since = new DateTimeOffset(DateTime.Now.AddDays(-7));
    var until = new DateTimeOffset(DateTime.Now.AddDays(-2));
    var filteredCommitLog = commitLog.Where(c => c.Committer.When > since && c.Committer.When < until);
    foreach (Commit commit in filteredCommitLog)
    {
        Console.WriteLine("{0} : {1}", commit.Committer.When.ToLocalTime(), commit.MessageShort);
        foreach (var parent in commit.Parents) {
            foreach (TreeEntryChanges change in repo.Diff.Compare<TreeChanges>(parent.Tree, commit.Tree)) {
                Console.WriteLine ("\t{0} :\t{1}", change.Status, change.OldPath);
            }
        }
    }

输出示例:

11/11/2015 8:09:41 AM -08:00 : Crashing test in mono_class_init() from a MonoGenericClass.
    Modified :  mcs/class/corlib/Test/System.Reflection/MonoGenericClassTest.cs
11/11/2015 8:12:03 AM -08:00 : [runtime] mono_class_init() - don't look for metadata if the dynamic image doesn't have it.
    Modified :  mono/metadata/class.c
11/11/2015 9:05:07 AM -08:00 : Merge pull request #2217 from rcruzs00/master
    Modified :  mcs/tools/macpack/LOADER
11/11/2015 11:26:25 AM -08:00 : Merge pull request #2198 from BrzVlad/feature-concurrent-work
    Modified :  mono/sgen/sgen-conf.h
    Modified :  mono/sgen/sgen-gc.c
    Modified :  mono/sgen/sgen-memory-governor.c
    Modified :  mono/sgen/sgen-workers.c
    Modified :  mono/sgen/sgen-workers.h
    Modified :  acceptance-tests/.gitignore
    Added : acceptance-tests/GCStressTests/AssemblyExtensions.cs
    Added : acceptance-tests/GCStressTests/AssemblyLoadContext.cs
    Modified :  acceptance-tests/Makefile.am
    Modified :  acceptance-tests/SUBMODULES.json
    Modified :  acceptance-tests/versions.mk

要跳过日志并仅获取过滤后的提交列表中的文件列表:

 git log --name-status --since "11/10/2015" --until="11/15/2015" --format=""

成为:

foreach (TreeEntryChanges change in repo.Diff.Compare<TreeChanges>(filteredCommitLog.First().Tree, filteredCommitLog.Last().Tree)) {
    Console.WriteLine ("\t{0}\t:\t{1}", change.Status, change.OldPath);
}

示例输出:

Modified    :   acceptance-tests/Makefile.am
Modified    :   acceptance-tests/SUBMODULES.json
Modified    :   external/referencesource
Modified    :   mcs/class/Facades/Makefile
Modified    :   mcs/class/Mono.Cairo/Mono.Cairo/Context.cs
Modified    :   mcs/class/Mono.Security/Mono.Security.Interface/CertificateValidationHelper.cs
Modified    :   mcs/class/Mono.Security/Mono.Security.Interface/MonoTlsProvider.cs
Modified    :   mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/ActionBlockTest.cs
Modified    :   mcs/class/System.Threading.Tasks.Dataflow/Test/System.Threading.Tasks.Dataflow/BatchBlockTest.cs
Modified    :   mcs/class/System.Threading.Tasks.Data

这篇关于如何使用libgit2sharp更改/删除/添加文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆