我试图使用JGit完成我的自定义git-push ant任务,该任务应该将已声明的分支推送到远程存储库,但它似乎没有工作。
这是我的任务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://username@host.com/repo/project.git"
branch="mybranch"
password="77CJr2xr" />
我创建了一个新分支并尝试运行此任务。该任务无异常运行,但对远程存储库没有影响。我对git很新,所以这可能是一个非常愚蠢的错误。我在使用RefSpec做错了吗?
答案 0 :(得分: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'以阅读更多内容。