Estoy usando nodegit y no puedo averiguar cómo detectar si ha habido cambios para confirmar.
Actualmente, me comprometo cuando ocurre un evento externo, pero no sé si esto causará una diferencia real en los archivos. No verifico si la confirmación está vacía antes de presionar, lo que me llevó a terminar con muchas confirmaciones vacías, me gustaría evitar eso.
Cuando lo hago manualmente, generalmente ejecuto un git status para verificar si había cambios para confirmar, estaba pensando en hacer algo similar aquí, pero no puedo entender cómo. ( aquí está la documentación )
console.log('committing...'); const commitResult = await commitFile(`schema.json`, schemaAsString, `${appName} (${appId})`); const statuses = await repo.getStatus(); console.log('getStatus status', statuses); console.log('getStatus status', statuses[0].status()); console.log('getStatus isModified', statuses[0].isModified()); console.log('getStatus path', statuses[0].path()); console.log('getStatus statusBit', statuses[0].statusBit()); console.log('pushing...'); const pushResult = await push(repo); console.log('pushResult', pushResult);En general: desde la línea de comandos, otra forma de ver si hay alguna diferencia es ejecutar git diff HEAD . La diferencia está vacía si no hay diferencias.
Parece que solo le importa schema.json en su secuencia de comandos: desde la línea de comando, sería git diff HEAD -- schema.json .
Si logra generar un comando similar en nodegit (obtenga la diferencia para schema.json entre HEAD y el árbol de trabajo), puede usarlo como condición al comienzo de su secuencia de comandos.
Lo descubrí probando cosas un poco al azar.
Utilizo la suma de comprobación del índice y la comparo antes y después de confirmar.
Si la confirmación está vacía, la suma de comprobación no cambia. Si la confirmación no está vacía, la suma de comprobación cambia.
Basado en eso, es fácil escribir una condición simple para realizar el empuje o no.
const repo = await clone(repositoryLocalPath); console.log('repo', repo); const indexBeforeCommit: Index = await repo.refreshIndex(); const indexBeforeCommitChecksum = indexBeforeCommit.checksum().tostrS(); console.log('indexBeforeCommit checksum', indexBeforeCommitChecksum); console.log('committing...'); const commitId = await commitFile(`schema.json`, schemaAsString, `Airtable - ${appName} (${appId})`); const indexAfterCommit: Index = await repo.refreshIndex(); const indexAfterCommitChecksum = indexAfterCommit.checksum().tostrS(); console.log('indexAfterCommit checksum', indexAfterCommitChecksum); if (indexBeforeCommitChecksum !== indexAfterCommitChecksum) { console.log('pushing...'); const pushResult = await push(repo); console.log('pushResult', pushResult); } else { console.log('no changes to push'); }