Git 预提交挂钩在提交后添加文件

Git Pre-Commit Hook Adding File After Commit

我正在尝试转储 mysql 数据库并使用预提交挂钩将 .sql 转储文件添加到暂存区,以便它可以包含在提交中(在 Windows 服务器 2012 R2/IIS)。下面的代码很好地转储了数据库,但在我提交后它仍然在暂存区显示 be.sql 文件......有时(?) - 它似乎在提交后将文件添加到暂存区(?)。这是一个预提交挂钩,所以我不知道为什么它可能会在提交发生后添加文件:

#!/bin/bash

# Dump Database
/c/Program\ Files\ \(x86\)/MySQL/MySQL\ Server\ 5\.7/bin/mysqldump.exe -u root --skip-extended-insert be > /c/inetpub/wwwroot/directory/be/be.sql

# Add Database
cd /c/inetpub/wwwroot/directory/be
git add be.sql

行为有点奇怪 - 我会看到 be.sql 仍在暂存区,所以我会提交。如果我之后 git status 树是干净的。如果我再次提交并且 git 状态,它将在暂存索引中显示已修改的 be.sql 文件(我没有修改它)。它来回走动。我只希望它转储 .sql 文件,将 .sql 文件添加到暂存索引,然后每次暂存索引干净时提交。任何关于为什么会发生这种情况的想法将不胜感激。

使用:

git commit -m "Message" --allow-empty

提交似乎有效。似乎 git 需要其他阶段性更改才能使挂钩起作用。所以它基本上没有进行提交,但仍然转储 be.sql 文件,由于日期已更改,该文件将在下一次修改后显示在暂存索引中。为了让提交完全通过,无论是否有其他分阶段更改,我使用了 --allow-empty 选项,它允许分阶段索引中没有任何内容的提交。