如何 运行 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
在根目录中;调整口味。
我想使用以下方式推送更改的文件:
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
在根目录中;调整口味。