LibGit2Sharp - 分阶段提交文件的最佳方式

时间:2016-01-18 03:31:52

标签: c# git libgit2sharp

我正在尝试编写一个基本的C#GIT函数,它将本地工作目录提交并推送到其主存储库。这是我第一次尝试使用GIT,我仍然试图了解一些基础知识。

这是我的代码。它不是很复杂,它需要做的就是确保使用我工作目录中的任何更改来更新存储库。它有效,但有一个警告,如下所述

public void Sync()
{
    using (var repo = new Repository(@"C:\Temp\Git\test"))
    {
        repo.Stage("*");
        repo.Commit("This is my comment");

        Remote remote = repo.Network.Remotes["origin"];
        var options = new PushOptions();

        options.CredentialsProvider = new CredentialsHandler(
        (url, usernameFromUrl, types) =>
            new UsernamePasswordCredentials()
            {
                Username = "myusername",
                Password = "mypassword"
            });

        var pushRefSpec = @"refs/heads/master";
        repo.Network.Push(remote, pushRefSpec, options, null, "push done...");

    }
}

我面临的问题是这个。如果我添加或修改任何文件,则它们会在存储库中相应更新。但是,如果没有需要提交的文件,则会引发以下异常:

No changes; nothing to commit

我希望能够做的是确定在尝试提交操作之前是否需要提交文件,因此如果不需要执行任何操作,则可以正常退出。 I.E有些东西:

if (there are files to commit)
{
    repo.Commit("This is my comment");
}

有谁知道如何实现这个目标?

如上所述,这是我第一次使用GIT,所以如果有比上面的代码更好的标准,我会非常感激,如果有任何建议。

非常感谢和最好的问候

1 个答案:

答案 0 :(得分:1)

看起来您可以使用Repository.RetrieveStatus()方法查看是否有需要提交的文件:

RepositoryStatus status = repo.RetrieveStatus();

if (status.IsDirty)
{
    // Stage, commit, and push your changes
}

如果您在命令行上使用Git(如果您过去没有使用Git,这似乎是值得的练习),这看起来等同于{{1} }命令 - 它显示已修改的文件,暂存用于提交的文件以及当前未跟踪的文件。