Index.RetrieveStatus对于不更改长度的文件,返回不变

时间:2014-11-19 02:38:38

标签: libgit2sharp

我不知道这是否是设计的,但我遇到的问题是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
                                });

1 个答案:

答案 0 :(得分:1)

这是libgit2 / LibGit2Sharp中的已知问题。确保订阅和/或添加对这些问题的评论,以便在他们前进时得到通知:

  

如果有,那么无论如何都要改变索引确定状态的方式?

简单地说,如果文件在播放后的同一秒内在workdir中被修改并且其内容长度没有改变,则不会被检测到。

在问题解决之前,(非常)hackish解决方法是确保在同一秒内不会发生对文件的两次更改(避免紧密循环,引入Thread.Sleep()调用,... )。是的,我知道...... hackish :(