git 如何在没有错误的情况下不提交任何东西?

ymdaylpp  于 2022-12-25  发布在  Git
关注(0)|答案(6)|浏览(129)

我正在尝试编写一个执行git commit的结构脚本;但是,如果没有要提交的内容,git就会退出,状态为1。deploy脚本会认为这是不成功的,然后退出。我确实想检测 actual failures-to-commit,所以我不能只给予fabric忽略git commit失败。我怎样才能允许空提交失败被忽略,这样部署就可以继续,但仍然可以捕捉到真实的提交失败时导致的错误?

def commit():
    local("git add -p && git commit")
aor9mmx1

aor9mmx11#

通过检查git diff-index的退出代码来预先捕获此条件?
例如(在shell中):

git add -A
git diff-index --quiet HEAD || git commit -m 'bla'
  • 编辑:根据Holger的注解修复了git diff命令。*
nnvyjq4y

nnvyjq4y2#

git commit手册页中:

--allow-empty
    Usually recording a commit that has the exact same tree as its
    sole parent commit is a mistake, and the command prevents you
    from making such a commit. This option bypasses the safety, and
    is primarily for use by foreign SCM interface scripts.
s8vozzvw

s8vozzvw3#

只是用一个明确的if语句扩展了Tobi和Holger的答案。

git add -A
if ! git diff-index --quiet HEAD; then
  git commit -m "Message here"
  git push origin main
fi

让我们给予它一点解释。

  1. git add -A:暂存更改(下一步需要)
  2. git diff-index --quiet HEAD将把您的暂存更改与HEAD进行比较。
    --quiet是重要的,因为它将暗示--exit-code,其“如果存在差异,则使程序以代码1退出,而0意味着没有差异”。
    看安静。
uidvcgyl

uidvcgyl4#

with settings(warn_only=True):
  run('git commit ...')

这会导致Fabric忽略失败。具有不创建空提交的优点。
您可以将其 Package 在with hide('warnings'):的附加层中,以完全抑制输出,否则您将在fabric输出中得到一个提示,指出提交失败(但fabfile继续执行)。

8mmmxcuj

8mmmxcuj5#

在执行shell时,可以使用... || true技术来声明一个预期失败并将其忽略:

git commit -a -m "beautiful commit" || true

这也会阻止shell脚本在使用errexit选项时退出。
除了... || true,您还可以使用任何其他退出时返回代码为0的命令,例如

git commit -a -m "beautiful commit" || echo "ignore commit failure, proceed"
c7rzv4ha

c7rzv4ha6#

试试/抓住宝贝!

from fabric.api import local
from fabric.colors import green

def commit(message='updates'):
    try:
        local('git add .')
        local('git commit -m "' + message + '"')
        local('git push')
        print(green('Committed and pushed to git.', bold=False))
    except:
        print(green('Done committing, likely nothing new to commit.', bold=False))

相关问题