【发布时间】: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