推送命令后的GitServlet密码查询

问题描述 投票:0回答:1

我想使用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':

此查询来自哪里?查询是来自码头还是来自jGit?如果来自码头,这里需要什么用户名?

embedded-jetty jgit
1个回答
0
投票

用户查询来自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

© www.soinside.com 2019 - 2024. All rights reserved.