git - 预提交脚本创建 mysqldump 文件,但是 "nothing to commit (working directory clean)"?

标签 git

我正在使用脚本 .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/

相关文章:

git - 键 user.name 的多个值 Git

Git 到 TFS 源代码管理的迁移

git - 如何用git用不同的本地分支覆盖远程分支

regex - 如何在 git svn 中评估忽略路径?

git - 通过 Git 提交关闭 Jira 问题

GIT 如何从非连续提交创建补丁

GIT 没有这样的身份 : id_rsa: No such file or directory

git - 如何将 go pkg 添加到现有仓库?

git - 如何将多个远程设备的git-lfs流量定向到单个端点?

windows - 如何在 Windows 上安装 go-sql-driver