我正在尝试使用NGit的IsClean()来确定是否在工作副本中检测到任何更改,它工作正常,但是当我尝试查看远程中是否有任何更改时,我认为IsClean()不是尝试的正确方法。所以我想知道是否有任何其他方法可以帮助我查看远程所做的更改。我尝试拉动远程存储库,但它似乎不起作用,有谁知道 NGit 中是否有任何方法可以做到这一点。
var repository = Git.Open(activeRepopath);
var status = repository.Status().Call();
Consoel.WriteLine(stauts.IsClean());
while (status.IsClean())
{
repository.Pull().Call();
}
我从这里找到了教程 IsClean()。
我实际上想要类似于构建机器人的gitpoller的东西。如果有人能告诉我如何开始,我很乐意朝这个方向努力。
在你给自己的解决方案中,你正在获取遥控器。这会更改您的本地存储库远程引用,并且可能是您想要的,也可能不是您想要的。在这个答案中:如何知道本地存储库与远程存储库不同,无需获取?概述了如何检查遥控器是否已使用 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");
}
在这里,我使用 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");