Запуск в TransportException "Ничего не нажимать" при отправке измененного файла с помощью JGit

Я использую JGit для извлечения ветки из моего репозитория git и изменения файла. После того, как я зафиксировал изменения, я пытаюсь их выдвинуть, но запускаюсь в TransportException:

Caused by: org.eclipse.jgit.errors.TransportException: Nothing to push.
at org.eclipse.jgit.transport.Transport.push(Transport.java:1332)
at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:169)
...

Мой код выглядит так:

this.checkoutBranch(branchName);
try (Writer writer = new OutputStreamWriter(new FileOutputStream(getFilePath(filepath).toFile(), true),
                    StandardCharsets.UTF_8))
{
    Yaml yaml = this.initializeYaml();
    Map<String, Object> parameterMap = this.getParameterMap(filepath, yaml);
    parameterMap.put(key, value);

    // write file
    yaml.dump(parameterMap, writer);

    // commit and push
    git.add().addFilepattern(filepath).call();
    git.commit().setMessage("Added parameter with key: '" + key + "'").call();

    git.push().setCredentialsProvider(getCredentialProvider()).call();
}
catch(GitAPIException | IOException e)
{
    throw new GitClientException("Cannot write parameters.", e);
}

Вот метод для проверки текущей ветви:

public void checkoutBranch(String branchName)
{
    try
    {
        git.checkout().setName("origin/" + branchName).call();
    }
    catch(GitAPIException e)
    {
        throw new GitClientException("Cannot checkout branch.", e);
    }
}

Я искал примеры JGit и нашел много из них, но ни один пример не обрабатывает изменения файла. Кто-нибудь намекнул, что может быть не так?

1 ответ

Решение

Призвание checkoutBranch приведет к отключению HEAD, и это может быть причиной сбоя команды push.

git.getRepository().getFullBranch() теперь возвращает идентификатор объекта (SHA-1) коммита, на который указывает удаленная ветвь.

Чтобы проверить удаленную ветку без отключения HEAD, Git необходимо создать локальную ветку, которая действует как прокси и отслеживает удаленную ветку. См. JGit: Извлечение удаленной ветви, чтобы узнать, как этого добиться с помощью JGit.

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