2

私のサンプル コードでは、これを行います (Windows の場合):

var repo = new Repository(command.RepoFolder);
for (int i = 0; i < 100; i++)
{
  string file = command.RepoFolder + "\\text.txt";
  File.WriteAllText(file, string.Format("File number {0}, written at {1}", i, DateTime.Now));

  repo.Index.Stage("text.txt");
  repo.Commit(string.Format("Written version {0}", i), new Signature("me through code", "email@email.com", DateTimeOffset.Now));
}

デバッガーでこのシーケンスをステップ実行すると、ループを実行する各ループで、text.txt ファイル内の予想されるチェックと適切なコミット メッセージを含む新しいコミットが作成されます。ただし、ブロックせずに実行すると、予想されるコミット メッセージを含む 100 個のコミットが得られますが、実際のファイルの変更が含まれているコミットは一部だけです。それらは通常、次の形式です。

- File number 54, written at 8/30/2013 10:27:38 AM
+ File number 88, written at 8/30/2013 10:27:39 AM

そのため、repo.Index.Stage() が非同期に発生し、ファイル システムの変更が通知される前にコミットが行われたように見えます。それは予想通りですか?これは「際どい git」動作ですか? Libgit2Sharp で変更がインデックスによって取得されるまで明示的に待機する方法はありますか?

添加:

  1. 別の行で書き直すのではなく、ファイルに追加すると、すべて正常に動作します
  2. git.exe を使用してコマンド ラインで同じことを行っても、そのような動作は見られません。
4

2 に答える 2

1

私は同じ問題を抱えていましたが、Thread.Sleepどれだけ待ってもトリックはうまくいきませんでしたが、これはうまくいきました

File.SetLastWriteTime(filePath, DateTime.UtcNow.AddHours(-1));

于 2013-09-11T03:13:53.000 に答える