JavaユーザーがGitベースのリポジトリを使用できるようにするアプリケーションを構築しようとしています。次のコマンドを使用して、コマンドラインからこれを行うことができました:
_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コードで同じことを実行しようとしています。JGitAPIを使用して、git init、追加、およびコミットを簡単に実行できました。
_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/2487157 do _git clone
_before_git Push
_そしてなぜそれが必要なのかわかりません。
私がこれを行う方法へのポインタはありがたいです。
_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
を使用 。
リモートブランチを追跡するanをプッシュする完全な例については、 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();
_
最も簡単な方法は、JGit PorcelainAPIを使用することです。
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();