25

ユーザーがGitベースのリポジトリを使用できるようにするJavaアプリケーションを構築しようとしています。次のコマンドを使用して、コマンドラインからこれを行うことができました。

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

これにより、コンテンツを作成、追加、ローカルリポジトリにコミットし、コンテンツをリモートリポジトリにプッシュすることができました。私は今、JGitを使用して、Javaコードで同じことを行おうとしています。JGit APIを使用して、git init、add、commitを簡単に実行できました。

Repository localRepo = new FileRepository(localPath);
this.git = new Git(localRepo);        
localRepo.create();  
git.add().addFilePattern(".").call();
git.commit().setMessage("test message").call();

繰り返しますが、これはすべて正常に機能します。git remote addとの例または同等のコードが見つかりませんでしgit pushた。私はこのSOの質問を見ました。

testPush()エラーメッセージで失敗しますTransportException: origin not found。他の例では、https://gist.github.com/2487157git clone 以前 git pushに行ったことを確認しましたが、なぜそれが必要なのかわかりません。

私がこれを行う方法へのポインタはありがたいです。

4

2 に答える 2

37

最も簡単な方法は、JGitPorcelainAPIを使用することです。

    Git git = Git.open(localPath); 

    // 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();
于 2017-11-23T15:15:32.180 に答える
17

org.eclipse.jgit.test必要なすべての例で次のことがわかります。

  • RemoteconfigTest.java使用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は、を使用してRemoteConfigさまざまなプッシュシナリオを示しています。リモートブランチの追跡をプッシュする
    完全な例については、 を参照してください。 抽出物:testTrackingUpdate()

    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();
    
于 2012-11-19T09:48:15.140 に答える