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.