【问题标题】:Force git commit when staging is empty, but pre-commit hook will add filesstaging 为空时强制 git commit,但 pre-commit 钩子会添加文件
【发布时间】:2013-07-29 02:56:11
【问题描述】:

有点卷曲的,我找不到答案。我有一个 git 的预提交钩子,它 mysqldumps 数据库,并暂存文件以进行提交。

我正在为一个项目运行 Drupal,因此,相当多的配置是通过界面完成并存储在数据库中的,显然,我热衷于在版本控制中捕捉时间点里程碑。

这是我正在尝试的基本缩减测试:

#!/bin/bash

#commit database as point-in-time
SITE_PATH="/data/site.com"
cd $SITE_PATH

FILE_NAME="db/site.sql"
$(mysqldump --skip-extended-insert --skip-dump-date db_name > $FILE_NAME)

#add changed file to commit
$(git add $FILE_NAME)

问题是,如果没有要暂存的文件,预提交脚本会运行,但提交未完成。如果您之后运行 echo $?git commit 返回退出代码 1(因为最初暂存中没有文件)。运行git status 表明数据库转储现在已准备好提交。

如果我在运行提交之前将任何其他文件添加到暂存中,则提交有效。

显然,我可以轻松编写一个包装器来执行我想要的操作,然后在一切都提前完成后调用git commit,但是任何人都可以阐明这种情况下的最佳实践吗?

【问题讨论】:

    标签: git pre-commit-hook pre-commit


    【解决方案1】:
    git commit --allow-empty
    

    这将阻止 git 中止未更改上一次提交的任何文件的提交。

    【讨论】:

    • 太好了,干杯!我一定错过了这个,很可能是在 man 条目中寻找“强制”关键字。
    猜你喜欢
    • 2017-05-15
    • 2019-06-18
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2014-06-27
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多