如何获取当前文件当前行的Git提交信息

时间:2019-06-04 14:15:22

标签: java intellij-idea intellij-plugin

如何获取当前文件当前行的Git提交信息,我想获取作者的用户名

我有当前文件和当前行号。

 @Override
    public void actionPerformed(AnActionEvent e) {
        final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
        final Document document = editor.getDocument();

        FileDocumentManager fileDocumentManager = FileDocumentManager.getInstance();
        VirtualFile currentFile = fileDocumentManager.getFile(document);


        if (e.getProject() == null || currentFile == null) {
            return;
        }
        final PsiFile psiFile = PsiManager.getInstance(e.getProject()).findFile(currentFile);
        String path = psiFile.getVirtualFile().getPath();
        path = path.replace(e.getProject().getBasePath(), "");
        BookMarkXPersistentStateComponent service = BookMarkXPersistentStateComponent.getInstance();
        String projectName = e.getProject().getName();
        int currentLineNumber = editor.getCaretModel().getLogicalPosition().line;
        service.addBookMark(new BookmarkXItemState(projectName, path, currentLineNumber, new Date()));
    }

1 个答案:

答案 0 :(得分:0)

如果我对问题的理解正确,那么您正在寻找注释(非常规)信息。

如果您仅需要单行的此信息,则可以通过运行诸如git log -n 1 -L <line-number>,<line-number>:<path-to-file>之类的自定义git命令直接从git获得该信息。有关详细信息,请参见git-log help

要运行此命令,请使用GitHandler类。

您还可以使用IntelliJ的内置注释功能来获取此信息,但是,这将需要首先加载整个文件的注释。为此,请检查com.intellij.openapi.vcs.annotate.AnnotationProvider 通过提供程序注释文件后,您可以使用com.intellij.openapi.vcs.annotate.FileAnnotation.CurrentFileRevisionProvider#getRevision,从中可以获得com.intellij.openapi.vcs.history.VcsFileRevision#getAuthor

另外,看看https://intellij-support.jetbrains.com/hc/en-us/community/posts/360004109859--VcsUtil-getVcsFor-return-null