2017-05-25 9 views
1

Ich möchte einen Zweig in einem vorhandenen Repository erstellen und diesen Zweig dann verfolgen. Der Erstellungszweig ist erfolgreich, der neu erstellte Zweig verfolgt immer noch den Master. Ich habe mehrere verschiedene Lösungen ausprobiert, aber das gleiche Ergebnis - Zweig wird erstellt, aber verfolgt Master.JGit - Ich kann den neu erstellten Zweig nicht verfolgen

Zuerst habe ich klonen das Repository:

Git.cloneRepository()./*set creds*/.setURI(..).setDirectory(...).call 

So weit so gut.

Erstellen Sie als Nächstes das Repository aus der Git-Datei, die vom Klon erstellt wurde.

FileRepositoryBuilder builder = new FileRepositoryBuilder(); 
Repository repo = builder.setGitDir(gitFile).readEnvironment().findGitDir() 
    .build(); 

An dieser Stelle habe ich versucht, sowohl den Zweig mit createBranch Satz auf true checkingOut, und es in zwei Schritten tun - schaffen, dann überprüfen. Hier ist die zweistufige Methode:

git.branchCreate() 
     .setForce(true) 
     .setName(branchName) 
     .setStartPoint("origin/master") 
     .call(); 
git.checkout() 
     .setName(branchName) 
     .setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK) 
     .setStartPoint("origin/"+branchName) 
     .call(); 

Andere Dinge, die ich versucht habe:

  • Einstellung Upstream-Modus
  • Einstellung Startpunkt SeetupUpstreamMode.SET_UPSTREAM Schritt auf branch erstellen
  • nicht tun separater Checkout, aber Einstellung creatBranch(true) am Checkout
  • schieben zwischen erstellen und Kasse

Das Ergebnis ist immer .git/config-Datei, die wie folgt aussieht:

[remote "origin"] 
    url = ssh:... 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
    rebase = true 
[branch "newbranch2"] 
    remote = origin 
    merge = refs/heads/newbranch2 << WANT THIS 

Any:

[remote "origin"] 
    url = ssh://.. 
    fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 
    rebase = true 
[branch "newbranch1"] 
    remote = origin 
    merge = refs/heads/master << TRACKING master, not newbranch1 

Auf den Zweigen ich mit regelmäßigen git erstellen (nicht JGit) die Konfigurationsdatei wie folgt aussieht Gedanken da draußen, wie ich meinen neuen Zweig den Ast statt Master machen lassen kann?

Mit JGit-4.6.0.201612231935

+0

Also, wollen Sie einen Zweig verfolgen, die noch nicht auf der Fernbedienung vorhanden ist? –

+1

Beachten Sie, dass 'Git.cloneRepository()' eine 'Git'-Instanz zurückgibt, von der Sie das Repository über 'getRepository()' beziehen können, ohne 'FileRepositoryBuilder' zu benötigen. Vergessen Sie auch nicht, die zurückgegebene Git-Instanz zu schließen, wenn Sie fertig sind. –

Antwort

1

Ich glaube, Sie nicht einen nicht bestehenden Zweig mit JGit des CreateBranchCommand verfolgen können. setStartPoint() ist nur nützlich, um anzugeben, wo der neue Zweig anfänglich zeigen soll.

Sie können jedoch direkt auf die Repository-Konfiguration mit

StoredConfig config = repository.getConfig(); 
config.setString("branch", "newbranch", "remote", "origin"); 
config.setString("branch", "newbranch", "merge", "refs/heads/newbranch"); 
config.save(); 

manipulieren Ist das Ihr Problem lösen?

0

Hier ist der letzte Arbeitscode: (danke Rüdiger Herrmann)

Git git = Git.cloneRepository... 

git.checkout().setCreateBranch(true).setName(branchName).call(); 

pushCmd.setRemote("origin") 
    .setRefSpecs(new RefSpec(branchName+":"+branchName)).call(); 

StoredConfig config = git.getRepository().getConfig(); 
config.setString("branch", branchName, "remote", "origin"); 
config.setString("branch", branchName, "merge", "refs/heads/" + branchName); 
config.save(); 
Verwandte Themen