推送命令后的 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
我想使用 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