In libgit2sharp https://github.com/libgit2/libgit2sharp/ how do you check for pending/uncommitted changes?
            Asked
            
        
        
            Active
            
        
            Viewed 6,577 times
        
    21
            
            
        - 
                    7You can also have a look on the `RepositoryStatus status = repo.Index.RetrieveStatus();` method further info in the [unit tests](https://github.com/libgit2/libgit2sharp/blob/vNext/LibGit2Sharp.Tests/StatusFixture.cs) – nemesv Oct 13 '12 at 13:33
- 
                    1@nemesv this should really be an answer ... it's really good :) – Joel Martinez Feb 17 '14 at 15:51
- 
                    2It looks like repo.Index.RetrieveStatus() is deprecated in favor of repo.RetrieveStatus() – Jason Koopmans Dec 02 '14 at 19:07
3 Answers
19
            The following works for me:
///DEPRECATED - see comment from @derptastic
public bool HasUncommittedChanges
{
    get
    {
        using (var repo = new Repository(repositoryRoot))
        {
            RepositoryStatus status = repo.RetrieveStatus();
            return status.IsDirty;
        }
    }
}
Thanks to @Derptastic for the link to LibGit2Sharp Wiki
 
    
    
        Valid
        
- 767
- 7
- 14
- 
                    1This has given me false positives on repos where git itself doesn't find uncommitted changes, but `repo.isDirty` returns true. If you want a simple bool check for git diff (or essentially, "Do I have uncommitted changes"), from the official docs - https://github.com/libgit2/libgit2sharp/wiki/git-diff - `repo.Diff.Compare().Count > 0` – Derptastic May 12 '20 at 08:10
7
            
            
        The following lines of code will provide the filename and the state of that file.
foreach (var item in repo1.RetrieveStatus())
{
  Console.WriteLine(item.FilePath);
  Console.WriteLine(item.State);
}    
 
    
    
        user1438038
        
- 5,821
- 6
- 60
- 94
 
    
    
        user5575670
        
- 71
- 1
- 1
6
            
            
        You can use repository.Diff.Compare().
    /// <summary>
    ///   Show changes between the working directory and the index.
    /// </summary>
    /// <param name = "paths">The list of paths (either files or directories) that should be compared.</param>
    /// <returns>A <see cref = "TreeChanges"/> containing the changes between the working directory and the index.</returns>
    public virtual TreeChanges Compare(IEnumerable<string> paths = null)
Passing no paths at all should give all changes.
 
    
    
        perh
        
- 1,668
- 11
- 14
