3

JGit を使用して、ブランチがリモート ブランチかローカル ブランチ (またはその両方) かを判断する方法はありますか? 私は持っている:

Map<String, Ref> allRefs = git.getRepository().getAllRefs();
Collection<Ref> values = allRefs.values();
for (Ref ref : values) {
  refs.add(ref.getName());
}

これは次を与えます:

HEAD
refs/heads/tmp01
refs/heads/master
refs/heads/newFeatureBranch
refs/heads/sampleBranch
refs/remotes/origin/master
refs/remotes/origin/newFeatureBranch

したがって、 newFeatureBranchはローカル ブランチとリモート ブランチの両方です。現在、ref.getName() に「remotes/origin」が含まれているかどうかを確認しています。しかし、ブランチがリモートかローカルかを判断するより良い方法はありますか?

4

3 に答える 3

2

git では、すべてのブランチがローカル ブランチです。それらはすべて のローカル リポジトリに存在.git/refsし、ローカル コミットへのポインタにすぎません。

「リモート ブランチ」と呼ばれるものは、 によって作成された単なるローカル ブランチですgit fetch

これらの「リモート ブランチ」がどのように呼び出されるかは によって決まりgit config remote.origin.fetchます。これは通常git fetch、 name で ref を作成するように指示するだけrefs/remotes/origin/*です。

したがって、参照の名前の接頭辞を確認することは、まさに正しい方法です。

于 2013-05-01T14:30:25.770 に答える
2

「ローカル ブランチ」という用語は通常、refs/heads 内の refs を指します。
「リモート ブランチ」という用語は通常、refs/remotes 内の refs を指します。

使用するローカル ブランチのみを一覧表示するには: git branchまたはgit.branchList().call()

使用するリモート ブランチのみを一覧表示するには: git branch -rまたはgit.branchList().setListMode(ListMode.REMOTE).call()

ローカル ブランチとリモート ブランチの両方を一覧表示するには、次を使用します git branch -agit.branchList().setListMode(ListMode.All).call()

ListBranchCommand.javaの対応するコードは次のとおりです。

if (listMode == null) {
        refList = repo.getRefDatabase().getRefs(Constants.R_HEADS);
} else if (listMode == ListMode.REMOTE) {
        refList = repo.getRefDatabase().getRefs(Constants.R_REMOTES);
} else {
        refList = new HashMap<String,Ref>(repo.getRefDatabase().getRefs(
                        Constants.R_HEADS));
        refList.putAll(repo.getRefDatabase().getRefs(
                        Constants.R_REMOTES));
}
于 2013-05-01T23:14:02.127 に答える
1

1 つのオプションは、すべてのリモート ブランチを一覧表示し、関心のあるブランチがこのリストにあるかどうかを確認することです。

List<Ref> remoteBranches = git.branchList().setListMode(ListMode.REMOTE).call()

JGit のBranchCommandTestbranchList()単体テストで、さらに多くの例を見つけることができます。


別のオプションは、リポジトリからリモート参照のみを取得することです。

Map<String, Ref> refList = repo.getRefDatabase().getRefs(Constants.R_REMOTES);

詳しくはListBranchCommandを参照してください。

于 2013-05-01T14:30:33.493 に答える