我不知道这是否是设计的,但我遇到的问题是Index.RetrieveStatus对于已更改但包含与更改前相同数量的字符的文件返回“未更改”。我还发现在这种情况下提交也会失败。我写了一个快速测试来向我自己(下面)证明这是预期的行为吗?如果是这样,无论如何都要改变索引确定状态的方式?我正在使用LibGit2Sharp 0.19.0.0,目的是尽快更新我的代码以使用0.20.0.0。
string repoPath = @"E:\TestLoc";
Repository.Init(repoPath);
Repository repo = new Repository(repoPath);
string filePath = Path.Combine(repoPath, "test.txt");
// Initial File Commit
File.WriteAllText(filePath, "12345678");
repo.Index.Stage(filePath);
Commit initialCommit = repo.Commit(
"Initial Commit For Test",
new Signature("TestAuthor", "TestEmail", DateTimeOffset.Now),
new Signature("TestAuthor", "TestEmail", DateTimeOffset.Now));
// Second File Commit
File.WriteAllText(filePath, "ABCDEFGH");
repo.Index.Stage(filePath);
Commit secondCommit = repo.Commit(
"Second Commit For Test",
new Signature("TestAuthor", "TestEmail", DateTimeOffset.Now),
new Signature("TestAuthor", "TestEmail", DateTimeOffset.Now),
new CommitOptions
{
AllowEmptyCommit = false
});
答案 0 :(得分:1)
这是libgit2 / LibGit2Sharp中的已知问题。确保订阅和/或添加对这些问题的评论,以便在他们前进时得到通知:
如果有,那么无论如何都要改变索引确定状态的方式?
简单地说,如果文件在播放后的同一秒内在workdir中被修改并且其内容长度没有改变,则不会被检测到。
在问题解决之前,(非常)hackish解决方法是确保在同一秒内不会发生对文件的两次更改(避免紧密循环,引入Thread.Sleep()调用,... )。是的,我知道...... hackish :(