我正在尝试使用NGit中的 IsClean()来确定是否在工作副本中检测到任何更改,它可以正常工作但是当我尝试查看是否有任何更改时远程我不认为IsClean()是正确的尝试方法。所以我想知道是否有任何其他方法可以帮助我看到远程更改。我尝试拉远程仓库,但它似乎工作,有没有人知道NGit中是否有任何方法。
var repository = Git.Open(activeRepopath);
var status = repository.Status().Call();
Consoel.WriteLine(stauts.IsClean());
while (status.IsClean())
{
repository.Pull().Call();
}
我在here上找到了关于IsClean()的教程。
我实际上想要类似于buildbot的gitpoller。如果有人能告诉我如何开始,我很乐意朝这个方向努力。
答案 0 :(得分:4)
在解决方案中,你给自己提取遥控器。这会更改您的本地存储库远程引用,可能是也可能不是您想要的。在这个答案中:How to know local repo is different from remote repo, without fetch?概述了如何使用ls-remote
命令检查远程是否已更改,或者在这种情况下使用NGit检查LsRemote
。
不提取检查可以如下所示:
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");
}
答案 1 :(得分:0)
这里我使用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");