remote - publicar tag git
¿Cómo hago git push con JGit? (2)
Estoy tratando de construir una aplicación Java que permita a los usuarios usar repositorios basados en Git. Pude hacer esto desde la línea de comandos, usando los siguientes comandos:
git init
<create some files>
git add .
git commit
git remote add <remote repository name> <remote repository URI>
git push -u <remote repository name> master
Esto me permitió crear, agregar y comprometer contenido en mi repositorio local y enviar contenidos al repositorio remoto. Ahora estoy tratando de hacer lo mismo en mi código Java, utilizando JGit. Pude hacer git init, agregar y confirmar fácilmente usando la API de JGit.
Repository localRepo = new FileRepository(localPath);
this.git = new Git(localRepo);
localRepo.create();
git.add().addFilePattern(".").call();
git.commit().setMessage("test message").call();
Una vez más, todo esto funciona bien. No pude encontrar ningún ejemplo o código equivalente para git remote add
y git push
. Miré esta pregunta de SO
testPush()
falla con el mensaje de error TransportException: origin not found
. En los otros ejemplos que he visto https://gist.github.com/2487157 hacer git clone
antes de git push
y no entiendo por qué es necesario.
Cualquier sugerencia de cómo puedo hacer esto será apreciada.
Encontrará en org.eclipse.jgit.test
todo el ejemplo que necesita:
RemoteconfigTest.java
utilizaConfig
:config.setString("remote", "origin", "pushurl", "short:project.git"); config.setString("url", "https://server/repos/", "name", "short:"); RemoteConfig rc = new RemoteConfig(config, "origin"); assertFalse(rc.getPushURIs().isEmpty()); assertEquals("short:project.git", rc.getPushURIs().get(0).toASCIIString());
PushCommandTest.java ilustra varios escenarios de inserción, utilizando
RemoteConfig
.
ConsultetestTrackingUpdate()
para ver un ejemplo completo detestTrackingUpdate()
empujar una sucursal remota.
Extractos:String trackingBranch = "refs/remotes/" + remote + "/master"; RefUpdate trackingBranchRefUpdate = db.updateRef(trackingBranch); trackingBranchRefUpdate.setNewObjectId(commit1.getId()); trackingBranchRefUpdate.update(); URIish uri = new URIish(db2.getDirectory().toURI().toURL()); remoteConfig.addURI(uri); remoteConfig.addFetchRefSpec(new RefSpec("+refs/heads/*:refs/remotes/" + remote + "/*")); remoteConfig.update(config); config.save(); RevCommit commit2 = git.commit().setMessage("Commit to push").call(); RefSpec spec = new RefSpec(branch + ":" + branch); Iterable<PushResult> resultIterable = git.push().setRemote(remote) .setRefSpecs(spec).call();
La forma más fácil es usar la API de porcelana JGit:
Repository localRepo = new FileRepository(localPath);
Git git = new Git(localRepo);
// add remote repo:
RemoteAddCommand remoteAddCommand = git.remoteAdd();
remoteAddCommand.setName("origin");
remoteAddCommand.setUri(new URIish(httpUrl));
// you can add more settings here if needed
remoteAddCommand.call();
// push to remote:
PushCommand pushCommand = git.push();
pushCommand.setCredentialsProvider(new UsernamePasswordCredentialsProvider("username", "password"));
// you can add more settings here if needed
pushCommand.call();