LibGit2Sharp — лучший способ для подготовки и фиксации файлов

Я пытаюсь написать базовую функцию С# 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, поэтому, если есть лучшие стандарты, чем мой код выше, я был бы очень признателен за любой совет.

Большое спасибо и лучшие пожелания


person user978426    schedule 18.01.2016    source источник


Ответы (1)


Похоже, вы можете использовать метод Repository.RetrieveStatus(), чтобы увидеть, есть ли файлы, которые необходимо зафиксировать:

RepositoryStatus status = repo.RetrieveStatus();

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

Если вы используете Git в командной строке (что кажется полезным, если вы мало использовали Git в прошлом), это выглядит эквивалентно команде git status — она показывает вам файлы, которые были изменены. , файлы, подготовленные для фиксации, и файлы, которые в настоящее время не отслеживаются.

person Ben    schedule 18.01.2016