将其作为BLOB提交时,以jgit显示文件的日志

时间:2013-10-25 12:14:35

标签: jgit

实现上述逻辑以创建仅包含我的文件的新提交(没有父项)。与CommitCommand commit = git.commit();

相比,存储库在存储库中的速度很快

但我无法获取特定文件的日志,更新/修改的次数,以及每次访问Constants.HEAD时,我都会无效。

任何帮助都将是非常有利的。

        Git git = jGitUtil.openRepo();
    Repository repository = git.getRepository();

    ObjectInserter repoInserter = repository.newObjectInserter();
    ObjectId commitId = null;
    try
    {
        byte[] fileBytes= FileUtils.readFileToByteArray(sourceFile);

        // Add a blob to the repository
        ObjectId blobId = repoInserter.insert(org.eclipse.jgit.lib.Constants.OBJ_BLOB, fileBytes);
        // Create a tree that contains the blob as file "hello.txt"
        TreeFormatter treeFormatter = new TreeFormatter();
        treeFormatter.append(actualFileName, FileMode.REGULAR_FILE, blobId);

        ObjectId treeId = treeFormatter.insertTo(repoInserter);

        System.out.println("File comment : " + relativePath + PortalConstants.FILESEPARATOR + actualFileName + PortalConstants.EP_DELIMETER + userComments);

        // Create a commit that contains this tree
        CommitBuilder commit = new CommitBuilder();
        PersonIdent ident = new PersonIdent(user.getFirstName(), user.getUserId());
        commit.setCommitter(ident);
        commit.setAuthor(ident);
        commit.setMessage(relativePath + PortalConstants.FILESEPARATOR + actualFileName + PortalConstants.EP_DELIMETER + userComments);
        commit.setTreeId(treeId);

        commitId = repoInserter.insert(commit);
        System.out.println(" commitId : " + commitId.getName());

        repoInserter.flush();
        System.out.println("Flush Done");
    }catch(IOException  ioe){
        log.logError(StackTraceUtil.getStackTrace(ioe));
        System.out.println(StackTraceUtil.getStackTrace(ioe));
    }
    finally
    {
        repoInserter.release();
    }
    return commitId.getName();
}

2 个答案:

答案 0 :(得分:0)

我可能会使用Add FileCommit File瓷器命令,而不是自己尝试实现它。然后应该可以通过以下方式检索日志:

    Iterable<RevCommit> logs = new Git(repository).log()
        .all()
        .call();
    for(RevCommit rev : logs) {
        System.out.println("Commit: " + rev + " " + rev.getName() + " " + rev.getId().getName());
    }

您可以根据commit-id检索其他信息。

我现在还将其添加为新的代码段Show Log

答案 1 :(得分:0)

请注意,如果您创建的是没有父项的提交,则表示没有历史记录。因此,您将无法看到该历史记录中的任何其他更改,因为它不存在。

您可能应该使用分支当前位置的父级提交,以便您能够获得更多信息。