Comandos git en nodejs

2 minutos de lectura

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

Avatar de usuario de Samar Panda
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:

https://github.com/notatestuser/regalo/problemas

  • 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


¿Ha sido útil esta solución?