public IRevisionVersion GetRevisionOfItem(IRevisionVersion maxRevisionVersion, string path)
    {
      var relativePath = path.Substring(m_fileSystemPath.Length);

      Commit maxCommit = maxRevisionVersion.GetCommit();
      var fileInGit = maxCommit[relativePath];
      if (fileInGit == null)
      {
        return new GitRevisionVersion(m_branch.Commits.Last()); // BegginingOfTime;
      }

      Commit foundCommit = null;
      {
        foreach (var commit in m_repository.Commits)
        {
          if (commit.Parents.Count() == 1)
          {
            TreeChanges changes = m_repository.Diff.Compare<TreeChanges>(commit.Tree, commit.Parents.Single().Tree);
            if (HasAnyChanged(changes.Added, relativePath) || 
                HasAnyChanged(changes.Modified, relativePath))
            {
              foundCommit = commit;
              break;
            }
          }
        }
      }

      if (foundCommit == null)
      {
        // This is a bug change every thing
        return new GitRevisionVersion(m_branch.Commits.Last()); // BegginingOfTime;
      }
      else
      {
        return new GitRevisionVersion(foundCommit);
      }
    }
    public IEnumerable<IRevision> GetRevisions(IRevisionVersion sourceRevision, IRevisionVersion targetRevision)
    {
      HashSet<string> paths = new HashSet<string>(new StringIgnoreCaseEqualityComarer());

      Commit minCommit = sourceRevision.GetCommit();
      var maxCommit  = targetRevision.GetCommit();

      if (maxCommit.Equals(minCommit))
      {
        // Nothing Happend
        return Enumerable.Empty<IRevision>();
      }
      IEnumerable<Commit> allCommits = FindAllCommits(maxCommit, minCommit);

      List<Commit> affectedCommits = new List<Commit>();
      foreach (var currentCommit in allCommits)
      {
        int count = currentCommit.Parents.Count();
        // We Ignore all merges
        if (count == 1)
        {
          affectedCommits.Add(currentCommit);
          foreach (var parent in currentCommit.Parents)
          {
            TreeChanges changes = m_repository.Diff.Compare<TreeChanges>(currentCommit.Tree, parent.Tree);
            AddChanges(paths, changes.Added);
            AddChanges(paths, changes.Deleted);
            AddChanges(paths, changes.Modified);
            AddChanges(paths, changes.Renamed);
            AddChanges(paths, changes.TypeChanged);
          }
        }
      }

      return paths.Select(p => new GitRevision(p)).ToList();
    }