在我的示例代码中,我这样做(在 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 中有没有办法明确地等待索引接收到更改?
添加:
- 如果我对文件进行附加而不是用不同的行重写,一切正常
- 如果我在命令行上使用 git.exe 做同样的事情,我看不到这样的行为