ngo*_*ley 10 git node.js nodegit
我整个上午都在尝试打开现有的仓库并使用nodegit更改分支或标记.文档很广泛但似乎已经过时了.关于我做错了什么的任何想法?
var NodeGit = require("nodegit");
var open = NodeGit.Repository.open;
var Tag = NodeGit.Tag;
var Checkout = NodeGit.Checkout;
open(location).then(function (repo) {
Tag.list(repo).then(function(array) {
// array is ['v1.0.0']
var ref = array[0]
Checkout.tree(repo, ref).then(function() {
// Want tag to be checked out out in detached state.
});
});
});
Run Code Online (Sandbox Code Playgroud)
joh*_*y81 11
因此,您的代码中缺少一些内容.首先是你没有终止承诺链,所以误吞了.你想用a .catch或a 来结束它.done.
其次,我认为你不太清楚结账的作用.低级git的一个令人困惑的事情以及它与git CLI的不同之处在于Checkout 只更新你的工作目录以反映第二个参数指向的树.
第三,您将字符串传递给期望其他内容的方法.文档显示它正在寻找Oid,Tree,Commit或Reference.让我们稍微修改一下代码.
var NodeGit = require("nodegit");
var open = NodeGit.Repository.open;
var Tag = NodeGit.Tag;
var Checkout = NodeGit.Checkout;
open(location).then(function (repo) {
return Tag.list(repo)
.then(function(array) {
// array is ['v1.0.0','v2.0.0']
return Tag.lookup(repo,array[0]);
})
.then(function(tag) {
return Checkout.tree(repo, tag.targetId(), { checkoutStrategy: Checkout.STRATEGY.SAFE_CREATE})
.then(function() {
repo.setHeadDetached(tag.targetId(), repo.defaultSignature, "Checkout: HEAD " + tag.targetId());
});
});
})
.catch(function(error) {
// log error
});
Run Code Online (Sandbox Code Playgroud)
这应该指向正确的方向.如果您需要更多帮助,我建议您在我们非常活跃的gitter频道停留.