Какой метод в 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");