Не удалось получить правильное содержимое файла с помощью commitID

Я использую следующий код для извлечения файла из репозитория JGIT:

public class JGitPrintContent3
{
    public static void main(String[] args) throws Exception
    {
        File gitWorkDir = new File("D:/jboss/server/repo/Repository/");
        Git git = Git.open(gitWorkDir);
        Repository repo = git.getRepository();

        ObjectId lastCommitId = repo.resolve("b35fd0300270e6ba4d9238a1ab328b25a627885a");//userFile.sql

        System.out.println("Points to : " + lastCommitId.name());

        RevWalk revWalk = new RevWalk(repo);
        RevCommit commit = revWalk.parseCommit(lastCommitId);
        revWalk.markStart(commit);

        RevTree tree = commit.getTree();
        TreeWalk treeWalk = new TreeWalk(repo);
        treeWalk.addTree(tree);
        treeWalk.setRecursive(true);
        treeWalk.setFilter(PathFilter.create("userFile.sql"));

        ObjectId objectId = treeWalk.getObjectId(0);
        System.out.println(" objectId : " + objectId );
        ObjectLoader loader = repo.open(objectId);

        File targetFile = new File("C:\\temp\\gittest\\target2\\" + "userFile.sql");
        OutputStream out = new FileOutputStream(targetFile);
        loader.copyTo(out);
        out.flush();
        out.close();

        System.out.println("Done");
    }
}

Но, к сожалению, он извлекает содержимое файла из ранее извлеченного содержимого (идентификатор фиксации).

Я был бы очень благодарен за вашу помощь.

Спасибо. ~Шьям */


person user2907154    schedule 22.10.2013    source источник
comment
См. stackoverflow.com/a/14856330/305973.   -  person robinst    schedule 22.10.2013


Ответы (1)


Вы жестко запрограммировали фиксацию в своем коде, поэтому вы всегда будете получать это значение.

ObjectId lastCommitId = repo.resolve("b35fd0300270e6ba4d9238a1ab328b25a627885a");//userFile.sql

Если вы хотите основывать его на текущей ветке, используйте repo.resolve("HEAD")

Также обратите внимание, что ваш RevCommit здесь не нужен; если вы хотите вместо этого получить текущее дерево, используйте вместо этого repo.resolve("HEAD^{tree}").

person AlBlue    schedule 07.11.2013
comment
Большое спасибо за ответ, AlBlue. ... На самом деле я пытаюсь получить содержимое объекта commitId b35fd0300270e6ba4d9238a1ab328b25a627885a. Но идентификатор не работает должным образом и извлекает более раннее содержимое commitId для предыдущего объекта commitId с тем же именем файла в репозитории. - person user2907154; 27.11.2013