Загрузите только один файл из удаленной ветки git с помощью Jgit

Я пытаюсь загрузить один файл (myFile.xml) из удаленной ветви git, не клонируя весь репозиторий, я нашел этот код, но он все еще работает, ошибка в getCO; функция ponent явно в RevCommit commit = revWalk.parseCommit(lastCommitId));

public void getComponent() throws IOException
      {
        File repoDir = new File("https://**.git");
           // open the repository
           Repository repository = new FileRepository(repoDir);
           // find the HEAD
           ObjectId lastCommitId = repository.resolve("47100a898d1c76558e49d3f292b8e7a6d052fe51");
           System.out.println("lastcommit to string "+lastCommitId.toString());

           // now we have to get the commit
           RevWalk revWalk = new RevWalk(repository);
           RevCommit commit = revWalk.parseCommit(lastCommitId);
           // and using commit's tree find the path
           RevTree tree = commit.getTree();
           TreeWalk treeWalk = new TreeWalk(repository);
           treeWalk.addTree(tree);
           treeWalk.setRecursive(true);
           treeWalk.setFilter(PathFilter.create("abcd/myFile.xml"));
           if (!treeWalk.next()) {
               throw new IllegalStateException("Unable to download file.");
               }
           ObjectId objectId = treeWalk.getObjectId(0);
           ObjectLoader loader = repository.open(objectId);

           // and then one can use either
           InputStream in = loader.openStream();
           // or
           loader.copyTo(System.out);
  }  

Exception in thread "main" org.eclipse.jgit.errors.MissingObjectException: Missing unknown 47100a898d1c76558e49d3f292b8e7a6d052fe51
    at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:168)
    at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:236)
    at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:890)
    at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:800)
    at testGit.Authenticate.getComponent(Authenticate.java:138)
    at testGit.Authenticate.main(Authenticate.java:90)

1 ответ

Протоколы Git не позволяют делать это напрямую, доступ к удаленным репозиториям ограничен конструкцией. Одним из вариантов с JGit было бы клонировать хранилище в памяти только через InMemoryRepository, однако это, вероятно, полезно только для небольших хранилищ, так как в противном случае он мог бы использовать много памяти.

Смотрите также полный фрагмент в jgit-cookbook

Другие вопросы по тегам