6

リモート ブランチを削除する方法がわかりません。

次の GIT コマンドを模倣しようとしていました: git push origin :branchToDelete

次のコードと、空のソースを使用したバリエーション:

RefSpec refSpec = new RefSpec();
refSpec = refSpec.setSource("");
// remove branch from origin:
git.push().setRefSpecs(refSpec).add(branchToDelete).call();

次のようなスローと例外:

org.eclipse.jgit.api.errors.JGitInternalException: Exception caught during execution of push command
    at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:175)
    at org.gitscripts.DeleteBranchOperation.execute(DeleteBranchOperation.java:27)
    at org.gitscripts.Main.main(Main.java:27)
Caused by: java.io.IOException: Source ref  doesnt resolve to any object.
    at org.eclipse.jgit.transport.RemoteRefUpdate.<init>(RemoteRefUpdate.java:285)
    at org.eclipse.jgit.transport.RemoteRefUpdate.<init>(RemoteRefUpdate.java:189)
    at org.eclipse.jgit.transport.Transport.findRemoteRefUpdatesFor(Transport.java:612)
    at org.eclipse.jgit.transport.Transport.findRemoteRefUpdatesFor(Transport.java:1150)
    at org.eclipse.jgit.api.PushCommand.call(PushCommand.java:149)
    ... 2 more

あなたのアイデアと解決策を前もって感謝します。

4

4 に答える 4

15

これはあなたを助けるはずです:

//delete branch 'branchToDelete' locally
git.branchDelete().setBranchNames('refs/heads/branchToDelete').call();

//delete branch 'branchToDelete' on remote 'origin'
RefSpec refSpec = new RefSpec()
        .setSource(null)
        .setDestination("refs/heads/branchToDelete");
git.push().setRefSpecs(refSpec).setRemote("origin").call();

jgit 2.0.0.201206130900-rでテスト済み

于 2012-09-12T09:35:32.810 に答える
3

通常の git 構文に従って、次のようにすべきではありませんRefSpec(): :branchToDelete?

于 2012-08-10T05:16:42.923 に答える
2

私はやったことがありませんが、DeleteBranchCommand指定して試しただけorigin/branchToDeleteですか?

編集: 特に、Git/JGit が構造体を介してリモート ブランチを参照することを意味します<remote name>/<branch name>(ListBranchCommand を使用すると、正しいスペルを取得したことを確認するのに役立ちます)。

ブランチ名の正確なスペルを知るには、 a を使用できますListBranchCommand( を呼び出すことを忘れないでくださいsetListMode(REMOTE))。

注: Git は JGit よりも奇妙な動作を許可するため、どこかに書かれていない限り、期待しないでください。

編集 : refspec は次の構文を持つことになっていることを意味します: <remote branch>:<local branch>(またはおそらくその逆) が、Git で機能する場合でも、一方の端を逃した場合に JGit で機能するとは思わないでください。

于 2012-08-10T07:16:09.040 に答える
0

これで動作させることができます:

StoredConfig config = git.getRepository().getConfig();
config.unsetSection("remote", "origin");
try {
    config.save();
} catch (IOException e) {
    logger.error(e.getMessage());
}

それが役に立てば幸い。

于 2012-10-09T12:15:53.803 に答える