Таким образом, у вас есть недостаток в коде. Во-первых, вы не прекращаете цепочку обещаний, поэтому проглатываются ошибки. Вы хотите закончить его либо .catch
, либо .done
.
Во-вторых, я думаю, вы не совсем уверены, что делает проверка. Одна из запутанных вещей с низким уровнем git и тем, как она отличается от git CLI, заключается в том, что Checkout только обновляет рабочий каталог, чтобы отразить дерево, на которое указывает второй параметр.
В-третьих, вы передаете строку методу, ожидающему чего-то другого. The docs показывают, что он ищет 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 channel, где мы довольно активны.
Вы не объяснили, что произойдет, когда вы запустите этот код. – Chris
Ничего не происходит - ошибок не было. Репо в настоящее время находится на главной ветке, после этого оно все еще находится на главной ветке. Я хочу переключиться на тег v1.0.0. – ngourley