Ответ 1
Таким образом, есть несколько вещей, которые вам не хватает в коде. Во-первых, вы не прекращаете цепочку обещаний, поэтому проглатываются ошибки. Вы хотите закончить его либо с помощью .catch
, либо .done
.
Во-вторых, я думаю, вы не совсем уверены, что делает проверка. Одна из запутанных вещей с низким уровнем git и то, как она отличается от CLI git, заключается в том, что 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
});
Это должно указывать вам в правильном направлении. Если вам нужна дополнительная помощь, я бы рекомендовал остановить наш канал gitter, где мы довольно активны.