So, es gibt ein paar Dinge, die Sie mit Ihrem Code vermissen. Das erste ist, dass Sie die Verkündigungskette nicht beenden, so dass Fehler verschluckt werden. Sie möchten es entweder mit einem .catch
oder einem .done
beenden.
Zweitens, ich denke, Sie sind nicht ganz sicher, was eine Kasse tut. Eines der verwirrenden Dinge mit Low-Level-Git und wie es sich von Git CLI unterscheidet ist, dass Checkout nur Ihr Arbeitsverzeichnis aktualisiert, um den Baum widerzuspiegeln, auf den der zweite Parameter zeigt.
Drittens übergeben Sie eine Zeichenfolge an eine Methode, die etwas anderes erwartet. The docs zeigen, dass es nach einem Oid, Tree, Commit oder Reference sucht. Lassen Sie uns diesen Code etwas aufpeppen.
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
});
Das sollte Sie in die richtige Richtung weisen. Wenn Sie mehr Hilfe benötigen, würde ich empfehlen, durch unsere gitter channel zu stoppen, wo wir ziemlich aktiv sind.
Sie haben nicht erläutert, was passiert, wenn Sie diesen Code ausführen. – Chris
Nichts passiert - keine Fehler geworfen. Der Repo befindet sich momentan im Master-Zweig, nach dessen Ausführung befindet er sich noch im Master-Zweig. Ich möchte zum Tag v1.0.0 wechseln. – ngourley