因此,我尝试使用 nodegit 库以编程方式执行以下操作:
Checkout hotfix branch 从 hotfix branch 获取 head commmit 创建一个 topic 分支,其 head 指向 hotfix branch head 将上游主题分支设置为远程 Cherry 从 master 中选择一个提交并应用于主题分支 Pause 开发人员修复cherry pick 合并并提交本地更改 然后代码pushs 自动创建一个拉取请求所以看起来我们一直到#4。当我使用 VSO Rest SDK for node 远程执行这些步骤并且没有冲突时,一切都可以在 VSO 上正常运行。它只是在本地使用 nodegit。
看起来从 nodegit 返回的所有对象都是本机对象,因此无法使用调试评估查看任何数据。拿到原型就行了。这是nodegit代码。每次我尝试设置上游分支时,都会收到有关引用无效的错误。这是代码。看到什么了吗?
let hotfixBranch = conflict.parameters.ontoRefName.substr(conflict.parameters.ontoRefName.indexOf("hotfix"));
let topicBranch = conflict.parameters.generatedRefName.substr(conflict.parameters.generatedRefName.indexOf("hotfix"));
await this.checkoutRemoteBranch(this.repo, hotfixBranch)
.then(() => {
log.info(`Getting head commit for ${hotfixBranch}}`);
return this.repo.getHeadCommit()
})
.then(commit => {
log.info(`Creating local topic branch ${topicBranch} with head commit pointed to ${commit.id().tostrS()}`);
return this.repo.createBranch(topicBranch, commit, true);
})
.then((ref) => {
return git.Branch.setUpstream(ref, "origin")
})
.then(() => this.repo.checkoutBranch(topicBranch))
.then(() => {
log.info(`Performing cherry pick with id ${this.hotfixCommit.id().tostrS().cyan} ${"on branch".green} ${topicBranch.cyan}`);
return git.Cherrypick.cherrypick(this.repo, this.hotfixCommit, {});
})
.then(result => {
if (result === -1) {
log.section("Found cherry pick conflicts");
log.error("IMPORTANT");
log.instruction("---------");
log.instruction("You must now open the local enlistment and resolve the conflict. Perform the following steps");
log.instruction("1) Open the repo at: " + args.cloneRepoTo);
log.instruction("2) Fix any merge conflicts");
log.instruction("3) Stage the changes");
log.error("DO NOT PUSH THE CHANGES TO THE UPSTREAM BRANCH");
log.instruction("4) Come back to this window and PRESS ANY KEY TO CONTINUE");
return this.pressKeyToContinue();
}
return null;
})
.catch(err => {
log.error(`Error cherry picking to local branch ${err}`);
});
在上面的代码中,冲突是我用来构造本地 nodegit 对象的 VSO 对象。