При разработке системы бекапов конфигураций сетевого оборудования на node js потребовалось использовать git для просмотра изменений в файлах. Git репозиторий, где лежат конфиги, приватный, доступ осуществляется по SSH ключам.
Nodegit - это node js пакет, который использует Си библиотеку libgit2. Пакет позволяет работать с удаленными и локальными репозиториями. Можно делать все тоже самое, что командой git. Создавать ветки, коммиты, делать git pull, push, checkout. В общем, все то, что умеет консольная команда git.
Пример кода:
const Git = require('nodegit'); // v0.26.4
const cloneOptions = {};
cloneOptions.fetchOpts = {
callbacks: {
certificateCheck: (e) => 0,
credentials: (url, userName) => {
return Git.Cred.sshKeyNew(
userName,
'/home/user1/.ssh/id_rsa.pub', // public key
'/home/user1/.ssh/id_rsa', // private key
'' // passphrase
);
}
}
}
Git.Clone.clone("git@github.com:repo/repo.git", "./repo", cloneOptions)
.then(repository => {
return repository.getBranchCommit("master");
})
.then(commit => {
return commit.message();
})
.then(message => console.log("Message:", message))
.catch(err => {
console.error(err.message);
});