Java JGit API: как обновить подмодуль git?

Я пытаюсь обновить подмодуль git с помощью Java JGit, чтобы он указывал на последнюю удаленную фиксацию.

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

Может ли кто-нибудь помочь исправить код или предоставить мне альтернативный подход. Заранее спасибо.

File parentWorkingDir= 
parentGit.getRepository().getDirectory().getAbsoluteFile();

try (Git git = Git.open(new File(parentWorkingDir,
"modules/submodulePath"))) {
 PullCommand command = git.pull();  //<- Try 1
 // PullCommand command = 
 // git.pull()setRemoteBranchName("refs/heads/branchName"); <- Try 2
 command.setCredentialsProvider(new 
 UsernamePasswordCredentialsProvider(userID, 
 String.valueOf(userPassword)));
 PullResult pullResult = command.call();
 MergeResult mergeResult = pullResult.getMergeResult();
 return mergeResult.getMergeStatus();
}

Фактический результат:

Попробуйте 1 -> Не удается оформить заказ из нерожденной ветки

Попробуйте 2 -> pullResult.getMergeResult(); возвращает null и заканчивается NullpointerException

Ожидаемый результат:

Должна быть возможность получить статус слияния, а подмодуль должен обновляться/указывать на последнюю фиксацию, аналогичную удаленной.


person karthick ravichandran    schedule 29.08.2019    source источник


Ответы (1)


Согласно этой статье вы обновляете подмодуль, открывая отдельный репозиторий Git, выполняя извлечение, как вы пытались, а затем фиксируете изменение в родительском репозитории Git:

  File workDir = parent.getRepository().getWorkTree();
  Git libModule = Git.open( new F‌ile( workDir, "modules/library" ) );
  libModule.pull().call();
  libModule.close();
  parent.add().addF‌ilepattern( "modules/library" ).call();
  parent.commit().setMessage( "Update submodule" ).call();
person centic    schedule 30.08.2019