有点卷曲,我无法找到答案。我有一个 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
在一切都提前上演后在最后调用,但是任何人都可以阐明这种情况下的最佳实践吗?