Estaba deambulando si alguien sabe/se metió en un paquete npm para trabajar con comandos de git. Tengo un proyecto de nodejs que quiero hacer con los siguientes comandos:
- clonar
- git crear rama
- solicitud de extracción de git: desde la sucursal creada
Probé algunos paquetes npm pero sin ningún éxito. Cualquier ayuda será apreciada, gracias
sámar panda
Usando un paquete externo: puede usar shelljs paquete npm
Sin usar un paquete externo: aprovechando nodejs child_process
módulo. A continuación se muestra la implementación.
1.exec_process.js
var exec = require('child_process').exec;
var result = function(command, cb){
var child = exec(command, function(err, stdout, stderr){
if(err != null){
return cb(new Error(err), null);
}else if(typeof(stderr) != "string"){
return cb(new Error(stderr), null);
}else{
return cb(null, stdout);
}
});
}
exports.result = result;
2.temp.sh
#! /usr/bin/bash
pwd
git --version
3.app.js
var execProcess = require("./exec_process.js");
execProcess.result("sh temp.sh", function(err, response){
if(!err){
console.log(response);
}else {
console.log(err);
}
});
Para ejecutar la aplicación puedes probar node app.js
Producción:
/raíz
git versión 1.8.1.2
De manera similar, puede agregar cualquier comando en el archivo de script de shell y ejecutarlo usando node. Demo y código fuente publicados en ejecutable.
Sugerir revisar git-extras cubre todos los casos de uso de git a través de la línea de comandos.
Si bien la respuesta de @samarpanda fue útil, un levemente solución más limpia (de la documentación de nodejs) es como sigue:
const util = require('node:util');
const exec = util.promisify(require('node:child_process').exec);
async function lsExample() {
const { stdout, stderr } = await exec('ls');
console.log('stdout:', stdout);
console.error('stderr:', stderr);
}
lsExample();
No creo que ninguno de los módulos admita relaciones públicas, pero para la administración de sucursales/clonación, intente gift
:
https://www.npmjs.com/package/gift
Este módulo parece tener la mayoría de las funciones de git. Para los relaciones públicas, sugiero crear un problema y/o contribuir a este increíble módulo:
-
Estoy usando gits porque mi código es demasiado largo para comentar: mi código. No recibo ningún error, pero al registrarme en el repositorio, la rama no existe. Tenga en cuenta que el repositorio del ejemplo es solo para este ejemplo.
– A Boba Fett le gusta JS
16 de abril de 2015 a las 15:16