2015-01-07 28 views
7

In JGit, cerco un modo per inserire un ramo e aggiungere il riferimento upstream (tracciamento).JGit - Spingere un ramo e aggiungere upstream (opzione -u)

È l'opzione -u o --set-upstream nello push command.

Non vedo un metodo nella classe PushCommand che consente di eseguire questa operazione.

Per favore, potresti dirmi come posso farlo?

PushCommand pushCommand = git.push() 
        .setRemote(remoteAlias) 
        .setRefSpecs(spec); 

risposta

6

Il JGit PushCommand non offre questa funzionalità (ancora), ma è possibile modificare la configurazione del repository come --set-upstream avrebbe fatto.

Se si passa un alias remoto per setRemote() (come il frammento della domanda suggerisce), è necessario impostare il monte modo:

StoredConfig config = git.getRepository().getConfig(); 
config.setString(CONFIG_BRANCH_SECTION, "local-branch", "remote", "remote-alias-name"); 
config.setString(CONFIG_BRANCH_SECTION, "local-branch", "merge", "refs/heads/name-of-branch-on-remote"); 
config.save(); 

Ciò comporterà questa sezione di configurazione

[branch "local-branch"] 
remote = remote-alias-name 
merge = refs/heads/name-of-branch-on-remote 

Se il telecomando non è stato ancora configurato (ad esempio non esiste una sezione [remote "remote-alias-name"], sarà necessario creare anche tale sezione. Ad esempio, ad esempio:

config.setString(CONFIG_REMOTE_SECTION, "remote-alias-name", "url", "url-of-remote"); 
config.setString(CONFIG_REMOTE_SECTION, "remote-alias-name", "fetch", "ref-spec"); 

Le costanti sono definite nella classe ConfigConstants.

+0

Funziona bene, grazie. Ora posso eseguire il recupero senza specificare il ramo remoto. Ma non capisco perché non ho le informazioni del ramo tracciato quando faccio un ramo git -vv. Sai perché ? Forse è perché le informazioni tracciate sono memorizzate nel file gitconfig. – ascott

+0

Se si crea un ramo con 'CreateBranchCommand' e il punto di inizio ammacca un ramo, è possibile specificare se il nuovo ramo deve tracciare il punto di partenza tramite' setUpstreamMode() '. Questo risponde alla tua domanda? –

+0

Finalmente è OK, è stata colpa mia! Quando ho configurato il mio telecomando ho dimenticato di chiamare remoteConfig.addFetchRefSpec, ecco perché quando ho chiamato git branch -vv, non mi ha mostrato il ramo tracciato ... Grazie per la tua risposta è stato perfetto. – ascott