Какой метод в NGit, чтобы увидеть, если удаленное репо изменилось?

Я пытаюсь использовать IsClean() из NGit, чтобы определить, были ли обнаружены какие-либо изменения в рабочей копии, это работает нормально, но когда я пытаюсь увидеть, изменилось ли что-нибудь в удаленном режиме, я не думаю, что IsClean() является подходящим методом для пытаться. Поэтому я хотел узнать, есть ли какой-нибудь другой метод, который помог бы мне увидеть изменения, сделанные в удаленном режиме. Я попытался вытащить удаленный репозиторий, но он, кажется, работает, кто-нибудь знает, есть ли какой-нибудь метод в NGit для этого.

       var repository = Git.Open(activeRepopath);
       var status = repository.Status().Call();
       Consoel.WriteLine(stauts.IsClean());

       while (status.IsClean())
       {
            repository.Pull().Call();

       }

Отсюда я нашел учебник по IsClean().

Я на самом деле хочу что-то похожее на gitpoller buildbot. Если кто-то может показать мне, как начать, я рад работать в этом направлении.

2 ответа

Решение

В решении, которое вы даете себе, вы получаете пульт. Это изменяет удаленные ссылки вашего локального репозитория и может быть, а может и не быть тем, что вы хотите. В этом ответе: Как узнать, что локальное репо отличается от удаленного репо без извлечения? описывается, как вы можете проверить, изменился ли пульт с ls-remote команда или LsRemote с NGit в этом случае.

Проверка без извлечения может выглядеть так:

var repository = Git.Open(activeRepopath);
ICollection<Ref> refs = repository.LsRemote().SetHeads(true).SetTags(true).Call();

// Compare the results of GetObjectId() of refs with 'oldRefs', obtained
// previously, to find out if tags or heads changed between the two calls.
// Possibly:
var newIds = refs.Select(r => r.GetObjectId().ToString()).OrderBy(r => r);
var oldIds = oldRefs.Select(r => r.GetObjectId().ToString()).OrderBy(r => r);
if (!newIds.SequenceEqual(oldIds)) {
     Console.WriteLine("Something changed");
}

Здесь я использую test_value для хранения номера удаленного файла, который изменился. Первоначально он равен нулю, и если что-то изменится в пульте, то test_value станет 1 или 2 в зависимости от количества измененных файлов, это поможет избежать цикла, и мы узнаем, что что-то изменилось.

var repository = Git.Open(activeRepopath);
int test_value = 0; 
ICollection<TrackingRefUpdate> refUpdate = null;

while (test_value == 0 )
{

    FetchResult result = repository.Fetch().Call();
    refUpdate = result.GetTrackingRefUpdates();
    test_value = refUpdate.Count();
    Console.Write(test_value);

}

Console.WriteLine("Something changed");
Другие вопросы по тегам