2014-07-25 72 views
1

我想完成我使用JGit的自定義git-push ant任務,它應該推送所謂的分支到遠程存儲庫,但它似乎沒有工作。自定義混帳推螞蟻任務不會在JGit工作

這裏有一個任務我的Java代碼:

public void setRepository(String repository) { 
     this.repository = repository; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    }  
    public void setUri(String uri) { 
     this.uri = uri; 
    }  
    public void setBranch(String branch) { 
     this.branch = branch; 
    } 


    public void execute() throws BuildException { 
    try{ 

     Git git = Git.open(new File(repository));    
     CredentialsProvider cp = new UsernamePasswordCredentialsProvider(username, password); 
     RefSpec spec = new RefSpec("refs/heads/" + branch + ":refs/heads/" + branch); 

     PushCommand pushCommand = git.push(); 
     pushCommand.setCredentialsProvider(cp).setRemote(uri).setForce(true).setRefSpecs(spec).call(); 


    }catch (Exception e) { 
     log(e, Project.MSG_ERR); 
     throw new BuildException("Could not push repository: " + e.getMessage(), e); 

    } 

下面是來自Apache Ant構建文件的行:

<gitpush 
    repository="./myrepo" 
    uri="ssh://[email protected]/repo/project.git" 
    branch="mybranch" 
    password="77CJr2xr" /> 

我創建了一個新的分支,並嘗試運行此任務。該任務無例外運行,但對遠程存儲庫沒有影響。我對git很陌生,所以這可能是一個非常愚蠢的錯誤。我在RefSpec中做錯了什麼?

+0

'PushCommand#call()'返回一個'PushResult',它繼而保存'RemoteRefUpdate'的集合。你檢查過這些嗎?他們應該給你一個線索實際上做了什麼。 –

+0

我得到的消息:'錯誤:拒絕非快速轉發/頭/ mybranch(你應該先拉)'試圖谷歌回答,但沒有運氣。也許我做了一些錯誤的創建新的空分支使用'git checkout --orphan mybranch'與'git rm --cached -r .'然後添加一些文件到它? – JulioBordeaux

回答

2

如果在最後一次抓取或克隆之後以及嘗試推送之前其他人推送到同一分支,則會返回錯誤消息denying non-fast-forward refs/heads/...

you> git clone ... 

bob> git clone ... 
bob> git commit 
bob> git push 

you> git commit 
you> git push <<-- error: denying non-fast-forward 

遠程存儲庫的receive.denyNonFastForwards配置設置控制是否允許非快進更新。通常這是不允許的,因爲它會改變遠程倉庫的歷史。在上面的例子中,Bob的提交會丟失。

搜索'git push error denying non-fast-forward'來閱讀更多。