【问题标题】:What is the method in NGit to see if remote repo changed?Ngit 中查看远程仓库是否更改的方法是什么?
【发布时间】:2014-05-15 08:44:26
【问题描述】:

我正在尝试使用 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() 上找到了来自 here 的教程。

我实际上想要类似于 buildbot 的 gitpoller 的东西。如果有人能告诉我如何开始,我很乐意朝这个方向努力。

【问题讨论】:

    标签: c# git ngit


    【解决方案1】:

    这里我使用 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");
    

    【讨论】:

      【解决方案2】:

      在您给自己的解决方案中,您正在获取遥控器。这会更改您的本地存储库远程引用,并且可能会或可能不会是您想要的。在这个答案中: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");
      }
      

      【讨论】:

      • @goonda the oldRefs 是您在前一个时间点获得的 refs(在“Something changed”之后执行oldRefs = refs;),用于检测旧时间和现在之间的变化。
      猜你喜欢
      • 2013-08-25
      • 2011-08-03
      • 2011-09-03
      • 2022-01-02
      • 2021-09-11
      • 2012-09-21
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多