如何 运行 git 有条件地推送

how to run git push conditionally

我想使用以下方式推送更改的文件:

git add . 
git commit -m 'build: maintenance' 
git push

但如果 package-lock.json 文件是唯一更改的文件

,我想忽略这些命令

如何将其配置为仅在至少存在除 package-lock.json

以外的任何文件时才推送更改的文件

如果能在跨平台中达到 运行 就好了

通过创建一个 js 脚本解决了,这里是解决方案

import { execSync } from 'node:child_process';

/**
 * push changed files, ignore if package-lock.json is the only changed file
 */
export function push() {
  let changed = execSync(
    'git add . && git diff-index --cached --name-only HEAD'
  )
    .toString()
    .split('\n')
    .filter((el) => el.trim() !== '' && el.trim() !== 'package-lock.json');

  if (changed.length > 0) {
    execSync("git commit -m 'build: maintenance' && git push");
  }
}

感谢你们的帮助<3

这列出了具有分阶段更改的文件:

git diff-index --cached --name-only HEAD

假设您使用的是 bash shell,您可以检查除了 package-lock.json:

之外是否还有其他内容
git add .
if git diff-index --cached --name-only HEAD | grep -vsxF package-lock.json; then
    git commit -m 'build: maintenance'
    git push
fi

我假设 package-lock.json 在根目录中;调整口味。