tag remote publicar new from delete crear git jgit

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 utiliza Config :

    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 .
    Consulte testTrackingUpdate() para ver un ejemplo completo de testTrackingUpdate() 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();