Cómo ejecutar commands git desde un nodo usando commands de terminal estándar

Estoy intentando fusionar programáticamente twigs en una twig principal utilizando un script de nodo. Lo primero que intenté fue ejecutar un binary de línea de command con Node.js , que funcionó bien para ejecutar commands de terminal. Pero encontré dificultades para cambiar el directory de trabajo. Quería cambiar el directory de trabajo al repository de git y luego ejecutar los commands de git desde allí. La ejecución de cd ~/repo o cd /home/me/repo no cambió en absoluto el directory de trabajo y no pude encontrar ninguna manera de cambiarlo más que usando cd .

Intenté ejecutar los commands de git desde el directory del script, pero apunté a mi repository. git --git-dir y git --work-tree pero ninguno de esos commands funcionó. El error fue el mismo: fatal: Not a git repository (or any of the parent directories): .git Supongo que esto se debe a que el directory desde el que se ejecuta el script no es un repository git.

Entonces, o quiero enviar commands de git a un directory distinto al que estoy ejecutando el script, o quiero una forma de cambiar el directory de trabajo del script. Preferiblemente el último. Mi código completo y salida están debajo

 import JiraData from './jiradata'; const jiraData = new JiraData(); const { exec } = require('child_process'); (async function () { const cards = await jiraData.getCardsInTest(); let commands = ['cd /home/me/repo', 'pwd']; let proceeding = true; // for (const card of cards) { // commands.push(`git merge origin/${card} --commit --no-edit`); // } for (const command of commands) { if (proceeding) { console.log(`Executing command "${command}"`); exec(command, (err, stdout, stderr) => { if (err) { proceeding = false; console.log(stderr); return; } console.log(stdout); }) } } })(); 

Salida:

 > ci@1.0.0 start /home/me/CI > babel-node index.js --presets es2015,stage-2 Executing command "cd /home/me/repo" Executing command "pwd" /home/me/CI 

Pruebe en su lugar con:

 git -C /path/to/git/repo your_git_command 

Eso ejecutará el command git en el context de su git repo /path/to/git/repo

Solucioné este problema usando ShellJS. ShellJS tiene un método .cd() que cambia el directory y parece mantenerse.