1

实现了上述逻辑以创建一个仅包含我的文件的新提交(没有父级)。与存储库中的提交相比,提交速度更快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();
}
4

2 回答 2

0

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

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

您可以在哪里根据提交 ID 检索附加信息。

我现在也将其添加为新片段显示日志

于 2013-10-28T07:42:09.140 回答
0

请注意,如果您正在创建一个没有父母的提交,那么您就是说没有历史记录。因此,您将无法从该历史记录中看到任何其他更改,因为它不存在。

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

于 2013-11-07T23:34:09.737 回答