1

有点卷曲,我无法找到答案。我有一个 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显示 db 转储现在已准备好提交。

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

我显然可以很容易地编写一个包装器来做我想做的事情,然后git commit在一切都提前上演后在最后调用,但是任何人都可以阐明这种情况下的最佳实践吗?

4

1 回答 1

4
git commit --allow-empty

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

于 2013-07-29T03:20:22.800 回答