我正在使用nodegit,但我不知道如何檢測是否有更改提交。
目前,當外部事件發生時,我正在提交,但我不知道這是否會導致檔案發生真正的差異。在推送之前我不檢查提交是否為空,這導致我最終得到很多空提交,我想避免這種情況。
手動執行時,我通常會運行 agit status來檢查是否有要提交的更改,我正在考慮在這里做類似的事情,但不知道如何做。(這里是檔案)
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);
uj5u.com熱心網友回復:
一般來說:從命令列,另一種查看是否存在差異的方法是運行git diff HEAD. 如果沒有差異,則差異為空。
您似乎只關心schema.json您的腳本:從命令列git diff HEAD -- schema.json。
如果您設法生成了一個類似的命令nodegit(獲取schema.jsonbetweenHEAD和 worktree 的差異),您可以在腳本的最開始使用它作為條件。
uj5u.com熱心網友回復:
我通過隨機嘗試一些東西來解決這個問題。
我使用索引校驗和,并在提交前后進行比較。
如果提交為空,則校驗和不會更改。如果提交不為空,則校驗和會更改。
基于此,很容易撰寫一個簡單的條件來執行推送與否。
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');
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/491538.html
標籤:javascript 混帐 节点git
上一篇:如何從RStudio查看正在使用的Git存盤庫的“http”地址?
下一篇:決議和理解Git命令列
