2016-11-10 9 views
4

Как определить последнюю связанную ветвь в репозитории Git? Я хочу клонировать только недавно обновленную ветвь вместо клонирования всех ветвей, несмотря на то, объединена ли она с мастером (ветка по умолчанию) или нет.Получить последние данные о совершенных филиалах (именах) в JGit

LsRemoteCommand remoteCommand = Git.lsRemoteRepository(); 
Collection <Ref> refs = remoteCommand.setCredentialsProvider(new UsernamePasswordCredentialsProvider(userName, password)) 
        .setHeads(true) 
        .setRemote(uri) 
        .call(); 

for (Ref ref : refs) { 
    System.out.println("Ref: " + ref.getName()); 
} 


//cloning the repo 
CloneCommand cloneCommand = Git.cloneRepository(); 
result = cloneCommand.setURI(uri.trim()) 
.setDirectory(localPath).setBranchesToClone(branchList) 
.setBranch("refs/heads/branchName") 
.setCredentialsProvider(new UsernamePasswordCredentialsProvider(userName,password)).call(); 

Может ли кто-нибудь помочь мне в этом?

ответ

2

Я боюсь, что вам придется клонировать весь репозиторий со всеми его ветвями, чтобы узнать новейшая ветка.

В списке LsRemoteCommand перечислены имена ветвей и идентификаторы коммитов, на которые они указывают, но не временную метку фиксации.

Дизайн Git's 'all the local' требует, чтобы вы клонировали репозиторий, прежде чем исследовать его содержимое. Примечание. Используя команды низкого уровня/API Git/JGit, можно получить головную фиксацию ветви для проверки, но это противоречит ее дизайну.

После того, как вы клонировали репозиторий (без первоначальной проверки), вы можете перебирать все ветви, загружать соответствующую фиксацию головы и видеть, какая из них самая новая.

В приведенном ниже примере клона хранилище со всеми его филиалами, а затем перечисляет все отрасли, чтобы узнать, в какое время их соответствующая головка совершает где сделана:

Git git = Git.cloneRepository().setURI(...).setNoCheckout(true).setCloneAllBranches(true).call(); 
List<Ref> branches = git.branchList().setListMode(ListMode.REMOTE).call(); 
try(RevWalk walk = new RevWalk(git.getRepository())) { 
    for(Ref branch : branches) { 
    RevCommit commit = walk.parseCommit(branch.getObjectId()); 
    System.out.println("Time committed: " + commit.getCommitterIdent().getWhen()); 
    System.out.println("Time authored: " + commit.getAuthorIdent().getWhen()); 
    } 
} 

Теперь, когда вы знаете, новейшую ветвь, вы можете оформить этой ветви.

+0

Спасибо за ответ !!!!! Будет ли сообщение, если я получу какие-то дорожные блоки ... – AshokDev