@Override
    public @NotNull GitFileAnnotation annotate(@NotNull Project project,
                                               @NotNull VirtualFile root,
                                               @NotNull FilePath filePath,
                                               @Nullable VcsRevisionNumber revision,
                                               @NotNull VirtualFile file) throws VcsException {
      // binary handler to preserve CR symbols intact
      GitBinaryHandler h = new GitBinaryHandler(project, root, GitCommand.BLAME);
      h.setStdoutSuppressed(true);
      h.addParameters("--porcelain", "-l", "-t");
      h.addParameters("--encoding=UTF-8");

      GitVcsApplicationSettings settings = GitVcsApplicationSettings.getInstance();
      if (settings.isIgnoreWhitespaces()) {
        h.addParameters("-w");
      }
      if (settings.getAnnotateDetectMovementsOption() == AnnotateDetectMovementsOption.INNER) {
        h.addParameters("-M");
      }
      else if (settings.getAnnotateDetectMovementsOption() == AnnotateDetectMovementsOption.OUTER) {
        h.addParameters("-C");
      }

      if (revision == null) {
        h.addParameters("HEAD");
      }
      else {
        h.addParameters(revision.asString());
      }
      h.endOptions();
      h.addRelativePaths(filePath);

      if (LOG.isDebugEnabled()) {
        LOG.debug("Starting " + h.printableCommandLine());
      }

      String output = new String(h.run(), StandardCharsets.UTF_8);

      return parseAnnotations(project, revision, file, filePath, root, output);
    }
@Override
    public @NotNull GitFileAnnotation annotate(@NotNull Project project,
                                               @NotNull VirtualFile root,
                                               @NotNull FilePath filePath,
                                               @Nullable VcsRevisionNumber revision,
                                               @NotNull VirtualFile file)