JGit устанавливает git: URI вместо https: для удаленного в CircleCI

У меня есть следующий код (см. комментарии к тому, что происходит):

// Clone repository from GitHub into a local directory.
Git git = Git.cloneRepository()
             .setBranch("gh-pages")
             .setURI("https://github.com/RAnders00/KayonDoc.git")
             .setDirectory(new File("/home/ubuntu/KayonDoc"))
             .call();

// Print out remotes in config from JGit
Config config = git.getRepository().getConfig();
config.getSubsections("remote").forEach(it -> {
    System.out.println(config.getString("remote", it, "url"));
});
// Prints https://github.com/RAnders00/KayonDoc.git
// Everything seems OK

// You could perform some changes to the repository here...

// Push changes to origin
git.push()
   .setCredentialsManager(new UsernamePasswordCredentialsProvider("RAnders00", "hunter2"))
   .call();
// Throws exception (look below)
Caught: org.eclipse.jgit.api.errors.TransportException: [email protected]:RAnders00/KayonDoc.git: push not permitted
org.eclipse.jgit.api.errors.TransportException: [email protected]:RAnders00/KayonDoc.git: push not permitted
        at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:164)
        at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:80)
        at <your class> (YourClass.java:?)
Caused by: org.eclipse.jgit.errors.TransportException: [email protected]:RAnders00/KayonDoc.git: push not permitted
        at org.eclipse.jgit.transport.BasePackPushConnection.noRepository(BasePackPushConnection.java:176)
        at org.eclipse.jgit.transport.BasePackConnection.readAdvertisedRefsImpl(BasePackConnection.java:200)
        at org.eclipse.jgit.transport.BasePackConnection.readAdvertisedRefs(BasePackConnection.java:178)
        at org.eclipse.jgit.transport.TransportGitSsh$SshPushConnection.<init>(TransportGitSsh.java:341)
        at org.eclipse.jgit.transport.TransportGitSsh.openPush(TransportGitSsh.java:166)
        at org.eclipse.jgit.transport.PushProcess.execute(PushProcess.java:154)
        at org.eclipse.jgit.transport.Transport.push(Transport.java:1200)
        at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:157)
        ... 3 more

JGit сохраняет URL git: в файле .git/FETCH_HEAD, который затем используется для нажатия.. Поскольку протокол git: не поддерживает аутентификацию, я не могу нажать удаленный и процесс не работает.

Файл .git/config содержит правильный URI для https: для пульта (то, почему код печатает URI https:).

Мой вопрос:

Что я могу сделать, чтобы JGit правильно установил URI https:
(что позволит мне снова нажать)?


Эта проблема возникает только в особой среде (на CircleCI, виртуальном ящике Ubuntu 12.04.2 LTS) - она ​​не воспроизводится на 15.10, 14.04 LTS и 12.04.2 LTS свежих дистрибутивах ubuntu и не воспроизводится в Windows.

Самый простой способ воспроизвести проблему - создать фиктивный репозиторий GitHub, затем начать строительство вашего фиктивного проекта на CircleCI, а затем повторно запустить свою первую сборку с помощью SSH. Затем у вас есть 30 минут времени SSH для загрузки любых groovy/java файлов в поле. Через 30 минут коробка будет принудительно отключена.


Если я использую git remote -v в каталоге, в который был клонирован, я получаю: (что указывает мне на то, что URI git: действительно используются)

origin  [email protected]:RAnders00/KayonDoc.git (fetch)
origin  [email protected]:RAnders00/KayonDoc.git (push)

Ответы

Ответ 1

Похоже, вы определили

Перенаправление URL

Git предоставляет способ переписать URL-адреса со следующей конфигурацией:

git config --global url."git://".insteadOf https://

Чтобы проверить, задано ли вы, проверьте конфигурацию своего репозитория:

git config --list

На выходе вы увидите следующую строку:

url.git://.insteadof=https://

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

[url "git://"]
    insteadOf = https://