Я хочу клонировать и изменить репозиторий с помощью jgit. Я хочу использовать протокол HTTP. Для этого jgit предлагает сервлет (GitServlet). Я использую контейнер сервлетов Jetty для запуска сервлета 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.
Если я внесу изменение и выполню push, то появится запрос пароляup:
git push
Username for 'http://localhost:8080':
Откуда этот запрос? Запрос приходит с Jetty или с jGit? Если это от Jetty, какое имя пользователя здесь нужно?