1

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()のチュートリアルを見つけました。

実際には、buildbot のgitpollerに似たものが必要です。誰かが私にどのように始めるかを教えてくれたら、私はその方向に喜んで取り組みます。

4

2 に答える 2

4

あなたが自分自身に与える解決策では、リモートを取得しています。これにより、ローカル リポジトリのリモート参照が変更されますが、それが必要な場合とそうでない場合があります。この回答では:ローカルリポジトリがリモートリポジトリと異なることをフェッチなしで知るには? 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");
}
于 2014-04-09T11:52:27.250 に答える
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");
于 2014-04-07T00:40:06.633 に答える