我正在使用脚本 .git/hooks/pre-commit 拍摄 MySQL 数据库和其他项目文件的快照。以下是内容:
#!/bin/bash
mysqldump -u user -ppassword --skip-extended-insert dbname > /path/to/repo/dbname.sql
cd /mnt/hoste/Storage/Code/test-repo/
git add /path/to/repo/dbname.sql
如果我运行:
git commit -am "Message"
创建了一个新的转储文件,但随后 git 告诉我:
nothing to commit (working directory clean)
然后,如果我再次运行相同的提交命令,它就会起作用:
1 file changed, 1 insertion(+), 1 deletion(-)
然后,如果我再次运行相同的命令,返回到“无须提交”。这种模式会无限延续——有效、无效、有效、无效。它不是基于时间的(我试过立即提交,等待 10 分钟)。 Mysqldump 肯定会更新 .sql 文件(它在文件末尾附近用 hh:mm:ss 格式标记日期)。
如果我获取脚本,并在命令行中逐行运行它(包括首先 cd 到 hooks 目录以完全模拟运行脚本),每次都会有一个新的提交。如果我把它放在 Hook 中的可执行文件中,或者在 repo root 中,并从命令行执行它,然后运行 commit 命令,它每次都有效。它只是不会每隔一段时间工作一次,然后仅当它从预提交内运行时才工作。
是什么导致了这种奇怪的行为?
最佳答案
在钩子(Hook)中,确保始终指定 git_dir 和 work_tree:
git --git-dir=/path/to/your/repo/.git --work-tree=/path/to/your/repo add -- yourFile
通过在 Hook 中更改文件夹,您不会更改当前的 git 存储库。如果该存储库应该更改,最好使用 --git-dir
选项明确引用它。
关于git - 预提交脚本创建 mysqldump 文件,但是 "nothing to commit (working directory clean)"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469112/