推送命令后的 GitServlet 密码查询

GitServlet Password query after push command

我想使用 jgit 克隆和修改存储库。 我想使用 HTTP 协议。 为此,jgit 提供了一个 servlet (GitServlet)。 我使用一个 servlet 容器 Jetty 来 运行 servlet GitServlet。 我已按如下方式实施:

public class HttpGitConnection {

    public void start() {
       Server server = new Server(this.port);
       GitServlet gs = new GitServlet();
       gs.setRepositoryResolver(this::handler);
       ServletHandler servletHandler = new ServletHandler();
       servletHandler.addServletWithMapping(new ServletHolder(gs), "/configs/*");
       this.server.setHandler(servletHandler);
       server.start();
       server.join();
    }

    private Repository handler(HttpServletRequest request, String name){
       try {
           Logger.debug("Repository Request {}", name);
           if (name.contains(".git")) {
               String repoName = name.split(".git")[0];
               if (!new File(repoFolder + File.separator + repoName).exists()) {
                  throw new RepositoryNotFoundException(name);
               }
               Repository repository;
               if (repositories.containsKey(repoName)) {
                   Logger.debug("GET REPO");
                   repository = repositories.get(repoName);
               } else {
                   Logger.debug("Open GIT REPO!");
                   repository = Git.open(new File(repoFolder + File.separator + repoName)).getRepository();
                   this.repositories.put(repoName, repository);
               }
               repository.incrementOpen();
               return repository;
            } else {
               Logger.error("Invalid repository name {}", name);
               throw new Exception("Invalid repository name " + name);
            }
         } catch (Exception e) {
            Logger.error(e);
            e.printStackTrace();
            return null;
         }
    }

}

我启动应用程序并执行以下命令:

git clone http://localhost:8080/configs/MyService.git
Cloning into 'MyService'...
...
Unpacking objects: 100% (4/4), done.
Checking connectivity... done.

如果我进行更改并执行推送,则会出现密码请求:

git push
Username for 'http://localhost:8080':

这个查询来自哪里?查询是来自 Jetty 还是来自 jGit?如果它来自 Jetty,这里需要什么用户名?

用户查询来自GitServlet/JGit。首先,必须激活 http 连接,因此 Git 的配置可以很容易地完成,如下所示:

StoredConfig config = repository.getConfig();
config.setBoolean("http", null, "receivepack", true);
config.save();

现在可以推送存储库中的更改。我在以下页面找到了解决方案:https://www.programcreek.com/java-api-examples/?code=arquillian/smart-testing/smart-testing-master/functional-tests/git-rules/src/main/java/org/arquillian/smart/testing/rules/git/server/EmbeddedHttpGitServer.java