Я пытаюсь выполнить свою собственную задачу 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);
}
И вот строка из файла сборки Antache Ant:
<gitpush
repository="./myrepo"
uri="ssh://[email protected]/repo/project.git"
branch="mybranch"
password="77CJr2xr" />
Я создаю новую ветку и пытаюсь запустить эту задачу. Задача выполняется без исключений, но не влияет на удаленный репозиторий. Я очень новичок в git, так что это может быть глупая ошибка. Я что-то делаю с RefSpec?
Сообщение об ошибке, 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
конфигурации receive.denyNonFastForwards
удаленного репозитория определяет, разрешены ли обновления без пересылки. Обычно это недопустимо, так как это изменяет историю удаленного репозитория. В приведенном выше примере Боб совершает ошибку.
Найдите "git push-ошибку, отрицающую не-быструю перемотку", чтобы узнать больше.
PushCommand#call()
возвращаетPushResult
который в свою очередь содержит коллекциюRemoteRefUpdate
. Вы проверяли это? Они должны дать вам понять, что толчок на самом деле сделал.error: denying non-fast-forward refs/heads/mybranch (you should pull first)
попыталисьerror: denying non-fast-forward refs/heads/mybranch (you should pull first)
ответ в Google, но безуспешно. Возможно, я сделал что-то не так, создав новую пустую ветку, используяgit checkout --orphan mybranch
сgit rm --cached -r .
а затем добавить некоторые файлы к нему?